Me he cambiado de host y de blog (ahora estoy con Wordress), en segundos serás "teletransportado" al nuevo servidor (casidiablo.net). Todo gracias a ustedes que me leen y me enlazan. Si no quieres esperar o no fuiste redireccionado haz click aquí.
Se pueden colocar secuencias de comandos dentro de un archivo para que dichos comandos se ejecuten en cualquier momento. Es lo mismo que hacer un programa, con la diferencia de que los comandos serán interpretados es decir, no se compila el fichero. El shell posee muchas características de un lenguaje de programación normal, como variables e instrucciones de control.
Casi todas las secuencias de comandos empiezan con #!/bin/sh. Los primeros caracteres indican al sistema que dicho archivo es una secuencia de comandos, y /bin/sh inicia el shell bash. Esto es así ya que podemos indicar que el programa se ejecute con otro shell (tcsh, ksh, etc.) o programa interprete. Por ejemplo, si se crea un programa en perl es necesario iniciar con la línea: #!/usr/bin/perl. Una vez iniciado el shell indicado, éste ejecuta una a una las líneas restantes del archivo.
Las secuencias de comandos de shell deben tener encendido su bit de permiso de “ejecución”. Puedes encender dicho bit con el comando: chmod a+x nombrearchivo.
Variables
Ya hemos hablado sobre las variables del shell. Cuando se están ejecutando una secuencia de comandos, ya están definidas algunas variables útiles:
$$: El identificador del proceso que se está ejecutando.
$0: El nombre de la secuencia de comandos.
$1 hasta $9: Los primeros 9 argumentos de línea de comandos que se pasan a la secuencia de comandos.
$#: El número de parámetros de línea de comandos que se pasan a la secuencia de comandos.
Estructuras de control
bash soporta la mayoría de las instrucciones de control utilizadas en los lenguajes de programación comunes, aunque la sintaxis cambia un poquitín. Ahora vamos a ver un ejemplo de una secuencia de comandos en las que se demuestra el uso de casi todas las instrucciones de control disponibles en bash:
#!/bin/bash
#el nombre de este archivo debe ser programa.sh
MAX=9
#Uso de la instrucción if
if [ $# -gt $MAX ]
then
echo "$0: $MAX o menos argumentos requeridos"
exit 1
fi
#Imprimir los dos primeros argumentos
echo "$0 : El argumento 1 es $1"
echo "$0 : El argumento 2 es $2"
echo ""
#Uso del for
for i in $1 $2
do
ls -l $i;
done
echo ""
#Uso de la intrucción case
echo "ejemplo case"
for i
do
case "$i" in
archivo1) echo "caso a";;
archivo2) echo "caso b";;
*) echo "Este es el famoso default: $i";;
esac
done
echo ""
#Uso de la instrucción while-done
echo "ejemplo while-done"
i=1;
#mientras que $i sea menor al número de argumentos
while [ $i -le $# ]
do
echo $i;
i=$[$i+1];
done
echo "";
#Uso de la instrucción until-done
echo "ejemplo until"
i=1;
#hasta que $i sea mayor al número de argumentos
until [ $i -gt $# ]
do
echo "$i argumentos se balanceaban sobre la tela de una araña";
i=$[$i+1];
done
echo ""
exit 0
La línea "MAX=9" establece una variable llamada MAX y le asigna el valor entero 9. Luego, el bloque if-fi comprueba si el número de argumentos es mayor de 9, en cuyo caso imprime un mensaje de error y aborta el programa.
Las instrucciones echo se utilizan para imprimir en pantalla. El shell entiende que cuando se presenta algo como: echo "algo $1", no debe imprimir "algo $1" sino "algo primerargumento", es decir, reconoce las variables dentro de cadenas de texto (como perl o php).
Las siguientes agrupaciones de comandos muestran el uso de las instrucciones de control disponibles en shell. La primera de ellas es el for-done (equivalente a for en C/C++ o Java). Es interesante ver que además de imprimir valores con echo, es posible utilizar comandos del shell, en este caso se toman los dos primeros argumentos y se utilizan para completar el comando ls -l.
Después, en el uso del case (equivalente al switch-case de C o Java), podemos observar el uso de esta instrucción de selección. En el ejemplo de while, se imprime la cantidad de argumentos proporcionados al programa; igualmente actua la instrucción until. Fíjate también que es posible utilizar comentarios con el signo numeral (#, almohadilla para los españoletes).
Un ejemplo completo para la utilización de este programa sería:
casidiablo# touch archivo1 archivo2
casidiablo# ls -F
archivo1 archivo2 programa.sh(*)
casidiablo# ./programa.sh archivo1 archivo2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
./programa.sh: 9 o menos argumentos requeridos
casidiablo# ./programa.sh archivo1 archivo2 arg3 arg4 arg5
./programa.sh : El argumento 1 es archivo1
./programa.sh : El argumento 2 es archivo2
-rw-r--r-- 1 casidiablo casidiablo 0 2007-02-10 14:16 archivo1
-rw-r--r-- 1 casidiablo casidiablo 0 2007-02-10 14:16 archivo2
ejemplo case
caso a
caso b
Este es el famoso default: arg3
Este es el famoso default: arg4
Este es el famoso default: arg5
ejemplo while-done
1
2
3
4
5
ejemplo until
1 argumentos se balanceaban sobre la tela de una araña
2 argumentos se balanceaban sobre la tela de una araña
3 argumentos se balanceaban sobre la tela de una araña
4 argumentos se balanceaban sobre la tela de una araña
5 argumentos se balanceaban sobre la tela de una araña
casidiablo#
Primero creamos dos archivos vacios con el comando "touch archivo1 archivo2". Con el comando ls -F comprobamos que existen dichos archivos más el programa (programa.sh). Puedes probar pasarle más de 9 argumentos, para comprobar que el if que colocamos el principio de verdad funciona. Luego se invoca el programa con 5 argumentos, los dos primeros son los nombres de los archivos creados antes.