Linux Magazine - Edición en Castellano, Nº 08

Page 56

DESARROLLO • Bash

ciona. Intenta arrancarlo. 15 if /usr/sbin/httpd2 &>/dev/null && /etc/init.d/ap che2 start &>/dev/null ;then 16 echo "### AVISO:el serv dor Web está caído, reinicio correcto." 17 else 18 echo "### AVISO:el serv dor Web está caído, El reinicio

FALLO! " 19 fi 20 fi 21 fi

La segunda condición if es un ejemplo del elegante estilo de programación que facilita la shell. El guión de arranque/ parada /etc/init.d/apache tiene una opción para comprobar que el demonio

está corriendo. En vez de interpretar la salida de texto de esta orden, usaremos el valor devuelto por el programa. El código de error o errorlevel será 0 para un programa que está completamente bien. Esto es equivalente al VERDADERO de la lógica binaria de la shell, donde cualquier error devolverá un código con un valor distinto de cero y por tanto sería el equivalente de FALSO.

Estructuras de control Bash tiene las típicas órdenes y estructuras de control de cualquier otro lenguaje de programación. Estas no juegan un importante papel en un contexto interactivo. Las condiciones if o Select Case no tiene mucho sentido para un usuario que está sentado al teclado y puede comprobar sus opciones antes de tomar una decisión. La siguiente condición if: if bla1 ; then cmd1 elif bla2 ; then cmd2 else cmd3 fi muestra, más o menos, el formato clásico tal como se usa en la mayoría de los lenguajes de programación de alto nivel. Nótese el punto y coma antes del then y la posibilidad de combinar else if en el más elegante elif. La expresión de prueba bla1 devolverá TRUE o FALSE. Pero puede reflejar el valor asignado a una variable ( if $check; then...) o devolver el valor de un programa que se haya llamado (if mkdir /tmp/test ;then.) Un programa que termina limpiamente devuelve el valor TRUE. En caso contrario, devolverá el valor FALSE en caso de error. La mayoría de los lenguajes de programación también tienen una condición select. En Bash select tiene la siguiente sintaxis: 01 case "$VAR" in 02 TEST1) 03 cmd1 04 ;; 05 TEST2 06 cmd2 07 ;; 08 *) 09 cmd3 10 ; 11 esac

56

Número 08

Nótese los dobles puntos y comas al final de cada bloque case. *) es una expresión especial que se corresponde con cualquier expresión que ya se ha encontrado. Las estructuras select a menudo se utilizan para recabar parámetros o en algunos casos para producir ayuda para los parámetros. Para este bucle for A in n1 n2 n3 n4 ... nn ; do cmd $A done itera sobre el elemento desde n1 hasta nn. $A acepta el valor actual del elemento línea a línea. La lista también puede ser una variable conteniendo múltiples valores separados por espacios: LIST="Harry Sally U Martin Yvonne" for A in $LIST ; do echo "Hola $A" done Hay que resaltar que Bash solamente puede manejar un limitado número de parámetros. Esto significa que rm fallará en un directorio con muchos miles de archivos. En contraste con esto for A in *; do rm $A; done funcionará perfectamente expandiendo el * como un comodín del archivo. while condition ; do cmd done El bucle iterará mientras condition devuelva el valor TRUE. Así que necesitamos una orden test. El siguiente ejemplo cuenta de 0 a 1000. i=0 while test $i -le 1000 ; do echo $1 i = $ [ $i + 1 ] done o si usamos el test abreviado: i=0

WWW.LINUX- MAGAZINE.ES

while [ $i -le 1000 ] ; do echo $1 i = $ [ $i + 1 ] done Mientras que un bucle while continuará mientras se cumpla la condición, un bucle until se parará tan pronto como la condición se cumpla: until condition ; do cmd done En teoría se pueden escribir todos estos ejemplos sintácticos en una sola línea, utilizando un punto y coma (;) para separarlos: if bla1 ;then cmd1 ;cmd2 ;else cmd3 ;fi. O usando un bucle for: for A in $LISTE ;do echo "Hola $A" ;done. Los recién llegados estarán felices de saber que Bash tiene una opción de depuración. El depurador es una gran ayuda si se está intentando encontrar errores lógicos o tipográficos (véase el cuadro Depuración Bash). El archivo de guión no necesita un nombre especial, sin embargo se debería mantener la convención de añadir la extensión .sh. De todas formas hay que añadir los permisos de archivo para que el guión sea ejecutable, esto es, hay que configurar el bit x para los usuarios que necesiten ejecutar el guión. A pesar de que se pueden escribir programas complicados con guiones shell; incluso una interfaz gráfica si fuera necesario, lo normal es utilizar Bash para apaños rápidos (que tienden a ser permanentes). Así pues los guiones shell son una herramienta incomparable para cualquier administrador, especialmente para los admins que no tiene tiempo o predilección por aprender lenguajes de guiones de más alto nivel, como Perl o Python, solamente para obtener los mismos resultados con, más o menos, la misma cantidad de código.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.