Wednesday, March 3, 2010

Usos del comando test

El comando if del Bourne Shell fue disenado para trabajar con comandos, y dado que en todos los scripts siempre es necesario comparar valores (numeros, cadenas de texto, archivos) el Bourne shell incluyo el comando test

Dependiendo del tipo de valores pasados al comando, este puede comparar valores, verificar permisos en archivos, o inclusive verificar la existencia de archivos.

Para indicarle al comando el tipo de comparacion por hacer, se debe pasar las opciones adecuadas al momento de contruir la sentencia que se desea verificar, asi el comando usa estos parametros para determinar que tipo de comparacion tiene que realizar. Luego el comando test termina, y devuelve el numero 0 si la expresion fue evaluada como verdadera, de lo contarrio un valor de 1 si la sentencia fue evaluada como falsa. Si dentro de la expresion se ha cometido un error, entonces el comando devolvera un valor mayor que 1.

El siguiente ejemplo muestra el comando test en una comparacion de valores numericos:

x=5
y=10
echo -n "test -eq: "
if (test $x -eq $y) then
echo "x=y"
else
echo "x diferente de y"
fi


El siguiente ejemplo muestra como comparar cadenas de texto:

cadena="Hola mundo"
echo "test -z: "
if (test -z $cadena)
echo "Longitud de la cadena es 0"
else
echo "Longitud de la cadena no es 0"
fi


Este ejemplo determina si un archivo existe o no:

archivo="/etc/samba/smb.conf"
echo "test -f: "
if (test -f archivo) then
echo "Archivo existe"
else
echo "Archivo no existe"
fi


Mas informacion sobre el comando y que otros tipos de opciones de comparacion hay consulte el manual mediante el siguiente comando:

man test


Para finalizar, posiblemente en muchos de los script que hemos visto, el comando test es reemplazado por su comando equivalente que es el simbolo [, si este es otro comando que existe como tal en el sistema, sino intenten el siguiente comando para ver donde se encuentra:


$which [
/usr/bin/[


Asi, podemos tomar uno de los ejemplos anteriores se convertiria en:

archivo="/etc/samba/smb.conf"
echo "test -f: "
if [ -f archivo ]; then
echo "Archivo existe"
else
echo "Archivo no existe"
fi


Con respecto al ejemplo anterior, es necesario dejar un espacio en blanco despues del "[" y antes del "]", y luego es necesario un punto y coma ";" luego del simbolo "]" y antes de la palabra then, o sino pueden bajar la palabra then a la siguiente linea y no necesitan en simbolo ";"

Hasta la proxima.

No comments: