La herramienta test
permite realizar diferentes tipos de verificaciones sobre todo tipo de archivos. Puede ser útil para tomar diferentes acciones desde scripts Bash dependiendo de la existencia, tipo y contenido de archivos y directorios. Veamos algunos ejemplos de uso de esta herramienta, parte del paquete coreutils.
test
realiza una verificación según la opción indicada sobre un archivo o directorio pasado como parámetro y finaliza con el estado 0 o 1 como código de retorno si el resultado fue verdadero o falso, respectivamente.
Ejemplos de uso
Por ejemplo, es posible determinar si un directorio existe empleando la opción -d
:
emi@hal9000:~$ test -d /etc emi@hal9000:~$ echo $? 0
emi@hal9000:~$ test -d /etcccc emi@hal9000:~$ echo $? 1
Tener en cuenta que la variable de entorno ?
muestra el código de retorno del último comando ejecutado.
Se observa que retorna 0 (verdadero) para el primer intento, y 1 para el segundo. Es posible comprobar que /etc
existe y /etcccc
no:
emi@hal9000:~$ ls -ld /etc drwxr-xr-x 136 root root 12288 Feb 13 13:42 /etc emi@hal9000:~$ ls -ld /etcccc ls: cannot access '/etcccc': No such file or directory
Generalmente se utiliza test
dentro de condiciones (if
) para realizar diferentes acciones. Por ejemplo mostra "ok" o "error" por salida estándar:
emi@hal9000:~$ if test -d /etc; then echo "ok"; else echo "error"; fi ok emi@hal9000:~$ if test -d /etccc; then echo "ok"; else echo "error"; fi error
Con la opción -f
es posible verificar si un archivo regular existe:
emi@hal9000:~$ test -f /etc ; echo $? 1 emi@hal9000:~$ test -f /etc/hosts ; echo $? 0
Tal como se observa, si el archivo existe pero no es un archivo regular (por ejemplo es un directorio o un socket), retorna falso.
Otros tests
Por ejemplo, es posible determinar si un archivo es un socket con -S
:
emi@hal9000:~$ netstat -xl | grep cups unix 2 [ ACC ] STREAM LISTENING 110968 /var/run/cups/cups.sock emi@hal9000:~$ test -f /var/run/cups/cups.sock; echo $? 1 emi@hal9000:~$ test -S /var/run/cups/cups.sock; echo $? 0
También es posible comprobar permisos. En este ejemplo, determinar si el usuario actual tiene permiso de escritura sobre un directorio:
emi@hal9000:~$ test -w $HOME; echo $? 0 emi@hal9000:~$ test -w /sbin; echo $? 1
Para más tests sobre archivos y directorios, consultar la página de manual:
man test