viernes, 19 de abril de 2013

El intérprete de órdenes V

Ejemplos útiles en "if..."

La vez anterior se estuvo usando la sentencia de control "if ... ; then ...; else...; fi" en esta ocasión se analizarán estos ejemplos

if [ "$user" != "gnu" ]; then
echo "Eh! fierita."
else
echo "Hola usuario de gnu !"
fi

El corchete [ expresión ] es equivalente a la función "test expresión" cuya función es evaluar lógicamente un predicado y devolver un valor lógico, en este caso el predicado es: "$user" != "gnu", se evalúa si el contenido de la variable LOCAL user no es igual a la cadena "gnu".

otro ejemplo sería:

 if [ "x$one" = "x-x" ]; then
echo "$one es -x"
else
echo "$one es not -x"
fi

que el castellano se traduce:

if (contenido de $one) es igual a  -x (suprima mensaje de error), then
diga (contenido de $one) es -x
en otro caso
diga (contenido de $one) es no -x

En este ejemplo uno se ampara ante el hecho que la variable no pueda contener valor lo que causaría que la evaluación del predicado de un mensaje de error.

if [ "$user" = "gnu" -o "$user" = "ung" ]; then
echo "Hola $user !"
else
echo "Y a vos quien te juna $user..."
fi

Aquí "-o" es un OR lógico dentro del predicado.

Los posibles operadores de predicado que reconoce la función "test" son los siguientes:

! EXPRESIÓN, negación lógica o NOT

EXPRESIÓN1 -a EXPRESIÓN2, AND lógico

EXPRESIÓN1 -o EXPRESIÓN2, OR lógico

-n STRING, da "true" si la longitud de la cadena es no nula.

-z STRING, da "true" si la longitud de la cadena es nula.

STRING1 = STRING2, da "true" si las cadenas coinciden.

STRING1 != STRING2, da "true" si las cadenas no coincide.

INTEGER1 -eq INTEGER2, da "true" si los enteros coinciden.

INTEGER1 -ge INTEGER2, idem,,, si entero1 >= entero2

INTEGER1 -gt INTEGER2, idem,,, si entero1 > entero2

INTEGER1 -le INTEGER2, idem,, si entero1 <= entero2

INTEGER1 -ne INTEGER2, idem,, si entero1 < entero2

FILE1 -ef FILE2, da "true" si los archivos tienen el mismo dispositivo es i-nodo.

FILE1 -nt FILE2, da "tuee" si el archivo1 tiene dato de modificación posterior al archivo2

FILE1 -ot FILE2, idem,, pero archivo1 anterior a archivo2

-b FILE, da "true" si el archivo apunta a un dispositivo (UNIX-like)

-c FILE, idem,, si es un dispositivo de caracteres (UNIX-like)

-d FILE, idem,, si es un directorio y existe

-e FILE, idem,, si el archivo existe

-f FILE, idem,, si el archivo existe y no es un puntero a dispositivo

-w FILE, idem,, si existe y tiene permisos de escritura

-x FILE, idem,, si tiene permisos de ejecución.

Existen otras opciones más pero son muy específicas del sistema UNIX-like