jueves, 9 de mayo de 2013

El intérprete de órdenes VI


En esta entrega seguiremos con las sentencias de control del BASH, la siguiente es:

for [condición] ; do {instrucciones}; done.

Esta instrucción de control es mas similar al "for" de python o perl, que su homónimo en C/C++...

Por ejemplo:

#!/bin/bash

for VAR in `cat list.txt`; do
echo "$VAR was found in list.txt"
done

exit 0


en este caso el contenido de la variable interna del shell ($VAR) toma los valores que da la ejecución del comando "cat list.txt", aqui las comas invertidas `...` le indica al shell que debe ejecutar de manera prioritaria los comandos encerrados por estas. "exit 0" devuelve al shell padre el valor que corresponde ejecución normal, es decir que no murió el proceso por errores. Para saber esto basta con hacer "echo $?"

otro ejemplo:

hcaste@azul:~$ for i in `ls`; do echo $i; done

cd-como.txt
cdrdao.txt
Clave
Sync
de
Firefox.html

uno podría pensar que es análogo al comando "ls" de UNIX, pero no, basta comparar con la salida de ls..

cd-como.txt                  
cdrdao.txt                    
Clave Sync de Firefox.html  

El motivo se debe a que se toma como separadores de campos los espacios en blanco.

Otra sentencia de control es: while [condición]; do {instrucciones}; done
Esta es una sentencia de control por anticipación. Un ejemplo es:

#!/bin/bash

count="0"
max="10"

while [ $count != $max ]; do count=`expr $count + 1`
        echo "Ya llegue a : $count"
done

exit 0

en cambio esta sentencia de control es por pos-condición until [condición]; do {instrucciones}; done

y por último la sentencia de control "case" cuyo formato es...

case [condición]
   patron-1) lista de comandos separados por ";;"
   patron-2) idem..
esac

por ejemplo:

#!/bin/bash

case "$1" in
    --ayuda)
    echo "Uso: $0 [--ayuda] [--puerto ] [--fecha]"
    ;;
    --puerto)
    telnet $3 $2
    ;;
    --fecha)
    date
    ;;
esac
exit 0

la próxima entrega se posteará sobre funciones.