fbpx Comando test en Linux: evaluar condiciones en scripts | Certificação Linux

Comando test en Linux: evaluar condiciones y expresiones en scripts

📅 01/01/2019 ⏱ 9 min ✍️ Uira Ribeiro
Linuxcomandos
Comando test en Linux: evaluar condiciones y expresiones en scripts
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

El comando test es una gran herramienta para probar condiciones. Basándose en la variable de retorno del comando test, se pueden armar lógicas de programación para ejecutar algo si una condición se cumple o no.

Puede probar condiciones en archivos, permisos, textos, números, e incluso a través de expresiones, y proporciona el resultado mediante la variable de retorno $?.

En este ejemplo el comando test verifica si 1 es menor que 2 (-lt = less than - menor que):

$ test 1 -lt 2 $ echo $?0

Como la variable de retorno fue 0, el número 2 es menor que 1.

En este otro ejemplo él prueba con el "-d" si el archivo /usr/src es un directorio:

$ test –d /usr/src$ echo $?0

Las opciones más comunes del comando test son:

OpciónPara qué sirveEjemplo
-d /directorioVerifica si un archivo es un directorio y si existe$ test -d /etc
-e archivoVerifica si un archivo existe, independientemente de su tipo$ test -e /etc/passwd
-f archivoVerifica si un archivo existe y si es común$ test -f /etc/passwd
-z archivoVerifica si el archivo está vacío$ test -z /etc/groups
-n "$variable"Verifica si el tamaño de un texto es mayor que cero$ test -n "$LIBRO"
-s archivoVerifica si un archivo existe y si su tamaño es mayor que cero$ test -s /etc/passwd
s1 = s2Verifica si un texto es igual a otro$ test "$LIBRO" = "Certificación Linux"
s1 != s2Verifica si un texto es diferente de otro$ test "$LIBRO" != "Certificación Linux"
x -eq yVerifica si un número x es igual a y$ VAR=10 ; test $VAR -eq 10
x -gt yVerifica si un número x es mayor que y$ VAR=10 ; test $VAR -gt 9
x -lt yVerifica si un número x es menor que y$ VAR=10 ; test $VAR -lt 11
x -ne yVerifica si un número x no es igual a y$ VAR=10 ; test $VAR -ne 11
x -ge yVerifica si un número x es mayor o igual a y$ VAR=10 ; test $VAR -ge 9
x -le yVerifica si un número x es menor o igual a y$ VAR=10 ; test $VAR -le 11
expresión -a expresiónVerifica si ambas expresiones son verdaderas$ test 10 -ge 9 -a 22 -gt 10; echo $?
expresión -o expresiónVerifica si una O expresión son verdaderas$ test 10 -ge 11 -o 22 -gt 10; echo $?
archivo1 -nt archivo2Verifica si archivo1 fue modificado después de archivo2 (más nuevo)$ test archivo1 -nt archivo2
archivo1 -ot archivo2Verifica si archivo1 fue modificado antes de archivo2 (más viejo)$ test archivo1 -ot archivo2
-r archivoVerifica si el archivo tiene permiso de lectura$ test -r archivo
-w archivoVerifica si el archivo tiene permiso de escritura$ test -w archivo
-x archivoVerifica si el archivo tiene permiso de ejecución$ test -x archivo
-O archivoVerifica si eres el dueño del archivo$ test -O archivo

Uso de [  ] en lugar del "test"

El comando test puede ser abreviado con corchetes [  ]. Observe que debe haber un espacio entre la expresión y los corchetes:

$ [ 10 -ge 8 ]$ echo $?0

Operadores || y &&

Los operadores (pipe pipe) II y && sirven para verificar si la expresión a la derecha retorna verdadero o falso.

El operador && verifica si algo que está a su derecha es verdadero, y de ser así ejecuta el comando a su izquierda.

En este ejemplo, forzamos el retorno verdadero con el comando "true" que siempre retornará verdadero:

$ true && echo "Deu certo"Deu certo

Si usamos el comando "false", que siempre retorna falso, el operador && no va a ejecutar el comando a la izquierda:

$ false && echo "Deu certo"

El operador II verifica si algo que está a su derecha es falso, y de ser así ejecuta el comando a su izquierda.

En este ejemplo, forzamos el retorno verdadero con el comando true. En este caso, el II no va a ejecutar nada.

$ true || echo "Deu certo"

Ahora bien, forzando el retorno falso con el comando false, el II ejecuta el comando echo:

$ false || echo "Deu certo"Deu certo

Los operadores && e II también pueden ser usados juntos:

$ test 100 -gt 99 && echo "SIM" || echo "NÃO"

En este caso retornará SÍ porque 100 es mayor que 99.

Control de flujo con if (si)

Los controles de flujo (if) son comandos que prueban algunas alternativas y, de acuerdo con el resultado, ejecutan comandos.

La lógica del comando if es "si esto es verdadero, haga esto, si no, haga aquello". Vea el ejemplo:

if [ $? = 0 ]; then 	echo ‘O comando foi completado com sucesso...’else 	echo ‘O comando falhou.’fi

En este ejemplo el if prueba si el contenido de la variable de retorno $? es 0. En caso positivo, ejecuta el comando echo "El comando fue completado con éxito...". Si la condición es falsa, ejecuta el comando echo "El comando falló.".

Diferente de otros lenguajes, el if prueba un comando y no una condición. Por lo tanto, debemos utilizar el comando test en conjunto con el if. Generalmente se escribe usando el atajo de los corchetes [  ] para el comando test.

Control de flujo con case

El case es una forma inteligente de comparar el valor de algo con varios patrones.

Caso una ocurrencia sea positiva, él permite que se ejecuten comandos.

Cada case es una expresión que corresponde a un patrón.

El operador ")" termina una lista de patrones e inicia una lista de comandos.

Lo que separa un patrón de otro es ";;".

Al final del case, se debe terminar con la instrucción esac (case al revés).

Ejemplo de un script que dependiendo del UID del usuario imprime un mensaje diferente:

#!/bin/bashID=$(id -u)case "$ID" in   0)      echo "Você é o root.";      echo "Parabens!"   ;;   1000)      echo "Você é o Uirá."   ;;   100[1-9])      echo "Vocé é outro usuário"esacecho "fim";

Si el valor de la variable ID es 0, imprimirá un mensaje de felicitación. Si es igual a 1000, imprime "eres el Uirá". Si está entre 1001 y 1009, imprime "Eres otro usuario".

Si se ejecuta con el usuario uira, que tiene el UID igual a 1000:

$ ./meucase Você é o Uirá.fim

Si se ejecuta como root:

$ sudo ./meucase Você é o root.Parabens!fim

El case es mejor que usar varias veces el comando "if" para comparar algo con varios patrones.

Loops con el comando for

$ for algo; do comando; comando2; done

El shell posee estructuras para probar condiciones y ejecutar determinadas secuencias de programas varias veces (loop), hasta que la condición probada se satisfaga.

Los tres comandos que posibilitan esto son el for (hasta que), el while (mientras sea verdadero) y until (mientras sea falso).

El comando for permite que los bucles (loops) se hagan para que uno o más comandos se ejecuten hasta que una determinada variable recorra todos los valores de una lista dada.

Vea un ejemplo simple:

$ for numero in um dois três quatro cincodoecho "Contando: $numero"done 
Contando: um
Contando: dois
Contando: três
Contando: quatro
Contando: cinco

El mismo comando puede ser escrito en una sola línea:

$ for numero in um dois três quatro cinco; do echo "Contando: $numero"; done

Vea el ejemplo:

$ ls -1 > lista_arquivos.txt

Ahora se puede usar el for para ejecutar diversos comandos para cada archivo de la lista:

$ for i in $(cat lista_arquivos.txt); do cp $i $i.backup; mv $i.backup /tmp/backup; done;

Este bucle asigna a la variable $i cada línea del archivo lista_archivos.txt.

La expresión $(comando) genera una lista con el resultado del comando. Tiene el mismo efecto que utilizar el comando entre comillas invertidas: `comando`.

Luego ejecuta los comandos para renombrar y mover los archivos hasta que la lista esté completa.

Ahora un ejemplo un poco más complejo, con uso del for con if:

$ for i in `ls -1`; do if test -f $i;  then echo “$i é um arquivo “; else echo “$i não é um arquivo”; fi ; done
Desktop não é um arquivoDocuments não é um arquivoDownloads não é um arquivoHR_PROFESSOR.sql é um arquivo

En esta línea, el resultado del comando ls -1 se coloca en la variable $i; Luego cada línea de la variable $i se prueba para saber si es un archivo; si es verdadero, se mostrará una frase y, si es falso, otra frase.

Loops con el comando while

$ while [ expresión ] ; do comando; comando; done

El while prueba continuamente una expresión, hasta que una expresión tenga variable de retorno igual a cero o verdadero.

En este ejemplo, la variable $i obtiene el valor inicial igual a cero.

Mientras (while) la condición del comando test representado por los [ ] retorne cero (verdadero), el bucle del loop continuará ejecutándose.

En el bucle la variable $i es incrementada, hasta que $i alcance la condición de no ser menor que 4:

$ i=0
$ while [ $i -lt 4 ]; do echo "conta $i" ; i=$[$i+1]; doneconta 0conta 1conta 2conta 3

El while necesita tener una condición de salida satisfecha, de lo contrario quedará en loop infinito.

Loops con el comando until

El comando until es lo inverso al comando while, pero ejecuta algo mientras el test sea falso, o con valores diferentes de cero.

Su sintaxis es:

until [CONDIÇÃO]do  [COMANDOS]done

Ejemplo:

#!/bin/bashcounter=0until [ $counter -gt 3 ]do  echo Counter: $counter  ((counter++))done

Al ejecutarse:

$ ./contador Counter: 0Counter: 1Counter: 2Counter: 3

El until es útil para hacer que un script espere hasta que un comando no retorne más error, ya que solo se ejecuta si el retorno del test es diferente de cero.

El código cero de salida de un programa generalmente indica que fue ejecutado con éxito.

En este ejemplo, el comando until se usa para esperar hasta que el host consiga hacer ping al IP 8.8.8.8. Cuando el comando ping consiga hacer ping al host 8.8.8.8, retornará cero, haciendo que el procesamiento deje el loop:

#!/bin/bash
until ping -c 1 8.8.8.8 &>/dev/null
do
    echo "Esperando a rede..."
    sleep 1
done
echo "A rede está no ar"

Aprenda mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.

¿Te gustó? Comparte

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp