Condicionales
Las estructuras de control condicionales toman como base el cumplimiento de una o más comparaciones para que puedan ejecutarse los comandos que aparecen enseguida.
La estructura condicional simple se basa en la instrucción if, que sigue esta sintaxis:
if condicion; then
uno-o-mas comandos a ejecutar
fi
Ejemplo:
if grep -q molina /etc/password; then
echo "Este usuario debe darse de baja del sistema"
echo "Porque ha dejado de trabajar para la institucion"
fi
En este ejemplo, grep devolverá 0, si el usuario molina existe en el archivo /etc/passwd. De modo que la condición está cumpliendose.
Habrá ocasiones en las se requiera comandos diferentes cuando no se cumpla condición especificada.
Ejemplo
if grep -q molina /etc/password; then
echo "Este usuario debe darse de baja del sistema"
echo "Porque ha dejado de trabajar para la institucion"
else
echo "Verifica que este usuario tenga los privilegios necesarios"
echo "para realizar las tareas que corresponde al rol asignado.2"
fi
Ahora bien, si el usuario molina, no existe en el archivo /etc/passwd, grep devolverá 1, de modo que se ejecutarán los comandos debajo de else.
Antes de crear un script, puede validarse el resultado de grep, accediendo a la variable $?, después de ejecutar el comando grep en cada caso. O sea.
$ grep -q molina /etc/password #La opción -q, sirve para que se ejecute en silencio, es decir, no muestre el resultado.
$ echo $? #Esta variable, guarda un 0, si el comando se ejecutó con éxito o un 1, si no produjo un resultado.
test resulta muy fácil de usar, si se quieren realizar comparaciones de archivos o directorios. Algunos usos de test son:
test -f nombre_de_archivo; #Test devuelve 0 si el archivo especificado existe
test ! -f nombre_de_archivo; #Test devuelve 0 si el archivo especificado no existe
test -d nombre_de_directorio; #Test devuelve 0 si el directorio especificado existe
test ! -d nombre_de_directorio; #Test devuelve 0 si el directorio especificado no existe
Podemos hacer una prueba directamente con test, y checando el valor de $?. Veamos algunos ejemplos:
test -f /etc/hosts; echo $?
test -d $HOME; echo $?