Shell Scripting – Comando de prueba

Un comando de prueba es un comando que se utiliza para probar la validez de un comando. Comprueba si el comando/expresión es verdadero o falso. Se utiliza para comprobar el tipo de archivo y los permisos relacionados con un archivo. El comando de prueba devuelve 0 como un estado de salida exitoso si el comando o la expresión es verdadero y devuelve 1 si el comando o la expresión es falso.

Sintaxis:

test [expression]

Ejemplo:

test "variable1' operator "variable2"

Aquí, expresión puede ser cualquier comando o expresión que pueda ser evaluada por el shell. Y se recomienda encerrar siempre las variables de prueba entre comillas dobles. 

Estas son algunas de las banderas de operador que se pueden usar con el comando de prueba , junto con su significado:

Banderas para archivos y directorios:

  • test -e filename: Comprueba si el archivo existe o no. Y devuelve 0 si el archivo existe y devuelve 1 si el archivo no existe.
  • test -d filename: Comprueba si el archivo es un directorio o no. Y devuelve 0 si el archivo es un directorio y devuelve 1 si el archivo no es un directorio.
  • test -f filename: Comprueba si el archivo es un archivo normal o no. Y devuelve 0 si el archivo es un archivo normal y devuelve 1 si el archivo no es un archivo normal.
  • test -s filename: Comprueba si el archivo está vacío o no. Y devuelve 0 si el archivo no está vacío y devuelve 1 si el archivo está vacío.
  • test -r filename: Comprueba si el archivo es legible o no. Y devuelve 0 si el archivo es legible y devuelve 1 si el archivo no es legible.
  • test -w filename: Comprueba si el archivo es escribible o no. Y devuelve 0 si se puede escribir en el archivo y devuelve 1 si no se puede escribir en el archivo.
  • test -x filename: Comprueba si el archivo es ejecutable o no. Y devuelve 0 si el archivo es ejecutable y devuelve 1 si el archivo no es ejecutable.

Banderas para strings de texto

  • string1 = string2: Comprueba si las dos strings son iguales o no. Y devuelve 0 si las dos strings son iguales y devuelve 1 si las dos strings no son iguales.
  • string1 != string2: Comprueba si las dos strings no son iguales o no. Y devuelve 0 si las dos strings no son iguales y devuelve 1 si las dos strings son iguales.
  • -n string: Comprueba si la string está vacía o no. Y devuelve 1 si la string está vacía y devuelve 0 si la string no está vacía.
  • -z string: Comprueba si la string está vacía o no. Y devuelve 0 si la string está vacía y devuelve 1 si la string no está vacía.

Banderas para la comparación de números

  • num1 -eq num2: Comprueba si los dos números son iguales o no. Y devuelve 0 si los dos números son iguales y devuelve 1 si los dos números no son iguales.
  • num1 -ne num2: Comprueba si los dos números no son iguales o no. Y devuelve 0 si los dos números no son iguales y devuelve 1 si los dos números son iguales.
  • num1 -gt num2: Comprueba si el primer número es mayor que el segundo número o no. Y devuelve 0 si el primer número es mayor que el segundo y devuelve 1 si el primer número no es mayor que el segundo.
  • num1 -ge num2: Comprueba si el primer número es mayor o igual que el segundo número o no. Y devuelve 0 si el primer número es mayor o igual que el segundo número y devuelve 1 si el primer número no es mayor o igual que el segundo número.
  • num1 -lt num2: Comprueba si el primer número es menor que el segundo número o no. Y devuelve 0 si el primer número es menor que el segundo y 1 si el primer número no es menor que el segundo.
  • num1 -le num2 : Comprueba si el primer número es menor o igual que el segundo número o no. Y devuelve 0 si el primer número es menor o igual que el segundo número y devuelve 1 si el primer número no es menor o igual que el segundo número.

banderas condicionales

  • condition1 -a condition2: Comprueba si las dos condiciones son verdaderas o no. Y devuelve 0 si ambas condiciones son verdaderas y devuelve 1 si alguna de las condiciones es falsa.
  • condition1 -o condition2: Comprueba si las dos condiciones son verdaderas o no. Y devuelve 0 si alguna de las condiciones es verdadera y devuelve 1 si ambas condiciones son falsas.
  • !expresión: Comprueba si la expresión es verdadera o no. Y devuelve 0 si la expresión es falsa y devuelve 1 si la expresión es verdadera.

Entonces, tomemos algunos ejemplos para comprender mejor el comando de prueba.

1. Comparaciones numéricas

A continuación se muestra un ejemplo para comprobar si dos números son iguales o no.

#!/bin/bash
# Example to check if two numbers are equal 
# or not

# first number
a=20

# second number
b=20

# using test command to check if numbers 
# are equal
if test "$a" -eq "$b" 
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Producción:

Comparación numérica

2. Comparaciones de strings

El comando de prueba también nos permite comparar strings. Podemos verificar si dos strings son iguales o no, si una string es mayor que la otra, si una string es menor que la otra, etc. Según el tamaño de la string, podemos realizar la comparación.

3. Igualdad de strings

A continuación se muestra un ejemplo simple para verificar la igualdad de dos strings usando el comando de prueba

#!/bin/bash
# Example to check if two strings are equal or not
# first string
a="Hello"
b="Hello"
if test "$a" = "$b"
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Producción:

Comparación de igualdad de strings

4. Orden de las strings

El orden de las strings básicamente significa verificar si una string es mayor que la otra o no. A continuación se muestra el ejemplo para verificar si una string es mayor que la otra. 

Guion:

#!/bin/bash
# Example to check if one string is greater than 
# the other
# first string
a="Hello"
b="Geek"
if test "$a" \> "$b"
then
   echo "$a is greater than $b"
else
   echo "$a is not greater than $b"
fi

Producción:

Comparación del orden de las strings

Tenemos que usar ‘\>’ en lugar de ‘>’ porque ‘>’ es un operador de redirección. Y para que funcione, tenemos que usar ‘\>’ en lugar de ‘>’. ‘\’ es un carácter de escape.

5. Tamaño de la cuerda

También podemos comparar strings según su tamaño usando el comando de prueba. A continuación se muestran algunos ejemplos para realizar las comparaciones.

#!/bin/bash
# Example to check if string contains some data
# or not

# first string 
a="Hello"

# second string 
b=""

# using test command on first string to check if 
# string is empty or not
# -n will return true if string is not empty
if test -n "$a"
then
   echo "String a is not empty"
else
   echo "String a is empty"
fi

# -z will return  true if string is empty
if test -z "$b"
then
   echo "String b is empty"
else
   echo "String b is not empty"
fi

Producción:

Comparación de tamaño de string

6. Comparaciones de archivos

El comando de prueba también nos ayuda a probar el estado de los archivos y carpetas en el sistema de archivos de Linux. A continuación se muestra un ejemplo para comprobar si un archivo está vacío o no. Para este propósito, podemos usar el indicador -s que devolverá verdadero si el tamaño del archivo es mayor que 0, es decir, si el archivo no está vacío y devolverá falso si el archivo está vacío.

#!/bin/bash
# Example to check if file is empty or not
# test command with -s flag to check if file
# is empty or not
# creating new file with the given name
filename="I_LOVE_GEEKSFORGEEKS.txt"

# touch command is used to create empty file
touch $filename

# checking if file is empty or not
if test -s $filename
then
   echo "File is not empty"
else
   echo "File is empty"
fi

# adding to the newly created text file 
echo "I love GeeksforGeeks" >> $filename

# checking again if file is empty or not
if test -s $filename
then
   echo "File is not empty now"
else
   echo "File is empty"
  
fi

Producción:

comparaciones de archivos

Ejemplo :

Script para verificar si el script se está ejecutando como root o no, usando el comando de prueba.

# check if the script is run as root or not
if test "$(id -u)" == "0" 
 then
    echo "This script is running as root" 
 else
    echo "This script is not running as root"1>&2
    exit 1

fi

Producción:

Script para verificar si el script se ejecuta como root o no usa el comando de prueba

Aquí, el indicador -id u se usa para verificar la identificación de usuario del usuario que está ejecutando el script. Y si la identificación del usuario no es 0, eso significa que el usuario no es root y el script imprimirá la declaración else. The1>&2 se usa para redirigir la salida a stderr. La salida 1 saldrá del script con un código de estado de 1, es decir, falla y si no usamos la salida 1, el script saldrá con un código de estado de 0, es decir, éxito.

Nota: Aquí, el 1 resaltado en color rojo se usa para indicar que el script que ejecutamos anteriormente salió con el código de estado 1. Porque no se estaba ejecutando como root. 

Publicación traducida automáticamente

Artículo escrito por amnindersingh1414 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *