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


Tal vez pueda interesarte


Compartí este artículo