En un script puede emplear cualquier programa o comando, junto con redireccionamiento, procesos y control de tareas. bash ignora comandos que comienzan con el caracter '#'. Esto es útil para agregar comentarios explicativos a los scripts.
Caracter empleado al comienzo de líneas en scripts para bash que indica que la línea entera es un comentario.
A continuación introducimos algunos comandos de bash y programas útiles al hacer scripts.
Comando internto de bash que lee una cadena de la entrada estándar y la asigna a una variable de ambiente (o en su defecto a la variable
REPLY).
Comando interno de bash que permite crear alias para ciertos comandos.
Comando interno de bash que permite eliminar alias creados con el comando
alias.
Programa que recibe el nombre de un archivo y retorna la parte que corresponde al directorio.
Programa que recibe el nombre de un archivo y retorna la parte que corresponde al nombre sin directorio.
Programa que retorna el nombre de la máquina en la que se ejecuta.
Programa que retorna el nombre del usuario que lo ejecuta.
Programa que retorna identificación y grupo(s) del usuario que lo ejecuta.
Comando interno de bash que permite cambiar atributos en variables de ambiente.
read
Lee una línea de entrada estándar y asigna las palabras a las variables que sigan al comando
read. Puede especificarse un mensaje que se presentará como prompt antes de empezar a leer con la opción
-p mensaje. El siguiente ejemplo lee dos palabras en las variables
NOMBRE y
APELLIDO:
read -p "Teclee nombre y apellido: " NOMBRE APELLIDO
Si la línea leída tiene más palabras que la cantidad de variables, el resto serán ignoradas. Si tiene menos palabras, las primeras variables (de izquierda a derecha) serán empleadas y el resto quedarán en blanco (i.e con la cadena vacía ""). En caso de que no se den nombres de variables, la línea leída quedará en la variable
REPLY.
alias
Con este comando puede definir alias para comandos, después de definir un alias bash lo remplazará por el comando completo. Por ejemplo un alias para abreviar
ls -l puede ser
ll, que se definiría como:
alias ll="ls -l"
Puede listar los alias definidos con la opción
-p del comando
alias.
unalias
Permite eliminar alias creados con el comando
alias, por ejemplo para eliminar el alias
ll se emplea:
unalias ll
Si se emplea la opción
-a, el comando
unalias elimina todos los alias definidos.
dirname
Recibe como primer parámetro el nombre completo de una archivo, incluyendo su ruta y envía a salida estándar sólo la ruta. Por ejemplo:
dirname /usr/doc/xterm/README.Debian
presenta en salida estándar
/usr/doc/xterm.
basename
Análogo a
dirname, pero envía a salida estándar el nombre del archivo.
hostname
Envía a salida estándar el nombre del computador en la red, esto también puede verse en la variable de ambiente
HOSTNAME. Con la opción
-f, el programa
hostname presenta el nombre completo, con la opción
-i la dirección IP, con la opción
-d el dominio DNS, con la opción
-a presenta nombres alternos de su máquina y con la opción
-y el dominio NIS
este programa extrae parte de la información del archivo
/etc/hosts y de
/etc/hostname.
whoami
Retorna el nombre del usuario que lo ejecuta. También puede verse en la variable de ambiente
USER.
id
Retorna nombre y número del usuario que lo ejecuta, así como nombre y número del grupo o grupos a los que pertenezca. Con la opción -g sólo retorna el número del grupo principal, con -u retorna sólo el número del grupo principal, con
-G retorna los números de todos los grupos a los que pertenece. Estas opciones pueden seguirse de
n para presentar nombres en lugar de números.
declare
Las variables de ambiente tienen atributos que pueden examinarse o cambiarse con este comando interno de bash. Los atributos pueden ser sólo lectura (opción
-r), exportable (opción
-x) y variable entera (opción
-i). Una variable de sólo lectura no puede ser modificada, y una variable entera sólo puede asociarse con números. [3]. Para examinar las variables que tengan un cierto atributo se emplea
declare seguido del código de la opción, por ejemplo para examinar las variables con atributo de sólo lectura
declare -r. Para cambiar un atributo a una variable se emplea la opción (precedida de
- o
+ para activar y desactivar) seguida del nombre de la variable, por ejemplo
declare -i N pone el atributo de variable entera a
N.
- Recomendamos de forma especial consultar la página del manual de bash. Hay algunas partes que complementan lo que se ha presentado en esta guía:
- bash puede hacer más expansiones de parámetros, con la sintaxis ${...}
por ejemplo sustituciones en el valor de una variable
. Puede consultar la información completa sobre este tema en la sección "expansión de parámetros".
- Pueden hacerse scripts para bash con otras características que no se han presentado en esta guía: if, case, while, for, function.
- El intérprete de comandos es una parte importante de la filosofía Unix, el libro clásico sobre este tema es de Brian. W. Kernighan y Rob Pike "El Entorno de Programación UNIX", Prentice-Hall Hispanoamericana. Este libro explica y muestra el uso de csh, un predecesor de bash
la mayoría de características de csh están disponibles en bash.
- En Internet puede consultar "Advanced Bash-Scripting Guide: A complete guide to shell scripting, using Bash" de Mendel Cooper, disponible en: http://linuxdoc.org/LDP/abs/html/index.html o Programación en BASH - COMO de introducción http://lucas.hispalinux.es/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/Bash-Prog-Intro-COMO.html
1.
2.
3. [[http://es.tldp.org/Manuales-LuCAS/AA_Linux_colegio-1.1/AA_Linux_colegio-1.1-html/x3772.htm#script.variables.2 El programa
man presenta páginas del manual, empleando el programa especificado en la variable de ambiente
PAGER o en su defecto con el programa
less (ver
Lectura bash y el juego de herramientas). Modifique y exporte la variable
PAGER para que
man emplee el programa
more para presentar información y pruebe el cambio.]] 4.
5.
6.
Haga un script que cada 90 minutos presente el mensaje "Hacer tareas". //Ayuda:// **source**. 7.
8.
1. Cree un script que sea interpretado por bash, que al ejecutarse busque entre sus directorios, todos los archivos, ordene los nombres alfabéticamente y le envíe un correo con esa información.
Ayuda: Puede emplear la opción
-R de
ls para listar subdirectorios, y la opción
-u de
sort.
#!/bin/bash
cd $HOME
ls -R | sort -u | mail $USERNAME@$HOSTNAME
2. La variable de ambiente
HOME contiene el nombre de su directorio personal. Comprúebelo y después empleela para cambiarse a su directorio. Después cambie esta variable y explique que ocurre con el comodín '~'.
echo $HOME; cd $HOME El comodin ~ es remplazado por el valor de la variable
$HOME.
3. El programa
man presenta páginas del manual, empleando el programa especificado en la variable de ambiente
PAGER o en su defecto con el programa
less (ver
Lectura bash y el juego de herramientas). Modifique y exporte la variable
PAGER para que
man emplee el programa
more para presentar información y pruebe el cambio.
export PAGER=more
man man
4. ¿Qué hace el comando
echo `ls` ? (note que se usan apóstrofes invertidos).
Ejecuta el comando
ls y el resultado del mismo como cadena lo presenta con el comando
echo
5. ¿Qué hace el comando
N=6 echo "'1+$N' = $((1+$N))" ? Después de dar su respuesta, compruébela empleando un intérprete de comandos.
Presenta
1+$N = 7.
6. Haga un script que cada 90 minutos presente el mensaje "Hacer tareas".
Ayuda: source.
El archivo puede ser
recuerda.sh, su contenido:
#!/bin/bash
sleep 90m
echo "Hacer tareas"
después ejecutarlo.
7. Cree un script que al ser ejecutado, cree un archivo
script2. El archivo
script2 creado debe poner la variable
PATH en el valor que tenga cuando el primer script sea ejecutado, añadir a tal variable la ruta
/opt/bin y debe crear un alías que cuando se ejecute muestre el contenido de la variable PATH (no olvide cambiar el modo del archivo
script2 generado para que sea ejecutable).
#!/bin/bash
echo 'PATH=$PATH:/opt/bin' > script2
echo 'alias sp="echo $PATH"' >> script2
chmod +x script2
8. Haga un script que después de ejecutarse pida al usuario 2 números y después presente la suma, la resta, el producto y la división.
#!/bin/bash
read -p "Numeros: " A B
echo $((A+B)) $((A-B)) $((A*B)) $((A/B))
Notas
|| [1] || En rigor lo interpreta con
/bin/sh pero en Debian
/bin/sh es un enlace a
/bin/bash ||
|| [2] || En la expresión pueden emplearse los operadores - (unario y binario), + (unario y binario),
para elevar a una potencia, * para multiplicar, / para divir, % para obtener residuo de una división. Hay operadores que operan a nivel de bits (representación binaria de los números que operan): ~ para negar bits, & para hacer "Y" entre bits de operandos y | para efectuar "O". También pueden emplearse valores booleanos
0 se interpreta como falso y 1 como verdadero
, pueden compararse números con los operadores >, <, <= (menor o igual), >= (mayor o igual), (igualdad), != (diferentes) y pueden operarse booleanos con ! para negar, && como conjunción (Y) y || como disyunción. Los números pueden escribirse en decimal, o en otras bases empleando como prefijo del número la base seguida del caracter '#' (también puede escribirse números en octal iniciándolos con 0 o en hexadecimal iniciándolos con 0x). ||
|| [3] || Otros atributos pueden ser "función" -f y arreglo -a ||