En este tutorial sobre secuencias de comandos de shell bash de Linux, vamos a aprender cómo comparar números, cadenas y archivos en secuencias de comandos de shell utilizando la instrucción if. Las comparaciones en un script son muy útiles y después del resultado de la comparación, el script ejecutará los comandos y debemos saber cómo podemos usarlos para nuestro beneficio.
Sintaxis de comparaciones en script de shell
if [ conditions/comparisons] then commands fi
Un ejemplo
if [2 -gt 3] then print "2 is greater" else print "2 is not greater" fi
Este fue solo un ejemplo simple de comparación numérica y podemos usar declaraciones o condiciones más complejas en nuestros scripts. Ahora aprendamos las comparaciones numéricas con un poco más de detalle.
Comparar números en Linux Shell Script
Este es uno de los métodos de evaluación más comunes, es decir, comparar dos o más números. Ahora crearemos un script para hacer una comparación numérica, pero antes de hacerlo, necesitamos conocer los parámetros que se usan para comparar valores numéricos. A continuación se menciona la lista de parámetros utilizados para las comparaciones numéricas
- num1 -eq num2 compruebe si el primer número es igual al segundo número
- num1 -ge num2 comprueba si el primer número es mayor o igual que el segundo número
- num1 -gt numero2 comprueba si el primer número es mayor que el segundo
- num1 -le num2 comprueba si el primer número es menor o igual que el segundo número
- num1 -lt numero2 comprueba si el primer número es menor que el segundo
- num1 -ne num2 comprueba si el primer número no es igual al segundo número
Ahora que conocemos todos los parámetros que se utilizan para las comparaciones numéricas, usémoslos en un script,
#!/bin/bash # Script to do numeric comparisons var1=10 var2=20 if [ $var2 -gt $var1 ] then echo "$var2 is greater than $var1" fi # Second comparison If [ $var1 -gt 30] then echo "$var is greater than 30" else echo "$var1 is less than 30" fi
Este es el proceso para hacer una comparación numérica, ahora pasemos a las comparaciones de cadenas.
Comparar cadenas en Linux Shell Script
Al crear un script bash, es posible que también debamos comparar dos o más cadenas y comparar cadenas puede ser un poco complicado. Para hacer comparaciones de cadenas, los parámetros utilizados son
- var1 =var2 comprueba si var1 es lo mismo que la cadena var2
- var1 !=var2 comprueba si var1 no es lo mismo que var2
- var1
- var1> var2 comprueba si var1 es mayor que var2
- -n var1 comprueba si var1 tiene una longitud mayor que cero
- -z var1 comprueba si var1 tiene una longitud de cero
Nota :- Es posible que haya notado que el símbolo mayor que (>) y el símbolo menor que (<) que se usan aquí también se usan para la redirección para stdin o salida estándar en linux Esto puede ser un problema cuando estos símbolos se usan en nuestros scripts, entonces, ¿qué se puede hacer para solucionar este problema?
La solución es simple, al usar cualquiera de estos símbolos en scripts, deben usarse con un carácter de escape, es decir, úselo como "/>" o "/<".
Ahora vamos a crear un script haciendo las comparaciones de cadenas.
En el script, primero verificaremos la igualdad de cadenas, este script verificará si el nombre de usuario y nuestras variables definidas son iguales y proporcionará una salida basada en eso. En segundo lugar, haremos una comparación mayor o menor que. En estos casos, el último alfabeto, es decir, z será el más alto y el alfabeto a será el más bajo en comparación. Y las mayúsculas se considerarán inferiores a una minúscula.
#!/bin/bash # Script to do string equality comparison name=linuxtechi if [ $USER = $name ] then echo "User exists" else echo "User not found" fi # script to check string comparisons var1=a var2=z var3=Z if [ $var1 \> $var2 ] then echo "$var1 is greater" else echo "$var2 is greater" fi # Lower case & upper case comparisons if [ $var3 \> $var1 ] then echo "$var3 is greater" else echo "$var1 is greater" fi
Ahora crearemos otro script que usará "-n ” &“-z ” con cadenas para verificar si tienen algún valor
#!/bin/bash # Script to see if the variable holds value or not var1=" " var2=linuxtechi if [ -n $var1 ] then echo "string is not empty" else echo "string provided is empty" fi
Aquí solo usamos el parámetro '-n' pero también podemos usar "-z “. La única diferencia es que con '-z', busca una cadena con longitud cero mientras que el parámetro "-n" busca un valor mayor que cero.
Comparación de archivos en Linux Shell Script
Esta podría ser la función más importante de comparación y es probablemente la más utilizada que cualquier otra comparación. Los parámetros que se utilizan para la comparación de archivos son
- -d archivo comprueba si el archivo existe y si es un directorio
- -e archivo comprueba si el archivo existe en el sistema
- -w file comprueba si el archivo existe en el sistema y si se puede escribir
- -r archivo comprueba si el archivo existe en el sistema y es legible
- -s file comprueba si el archivo existe en el sistema y si no está vacío
- -f archivo comprueba si el archivo existe en el sistema y es un archivo
- -O archivo comprueba si el archivo existe en el sistema y si es propiedad del usuario actual
- -G file comprueba si el archivo existe y si el grupo predeterminado es el mismo que el del usuario actual
- -x archivo comprueba si el archivo existe en el sistema y es ejecutable
- archivo A -nt archivo B comprueba si el archivo A es más reciente que el archivo B
- archivo A -ot archivo B comprueba si el archivo A es más antiguo que el archivo B
Aquí hay un script que usa la comparación de archivos
#!/bin/bash # Script to check file comparison dir=/home/linuxtechi if [ -d $dir ] then echo "$dir is a directory" cd $dir ls -a else echo "$dir is not exist" fi
Del mismo modo, también podemos usar otros parámetros en nuestros scripts para comparar archivos. Esto completa nuestro tutorial sobre cómo podemos usar comparaciones numéricas, de cadenas y de archivos en scripts bash. Recuerde, la mejor manera de aprender es practicarlos usted mismo.
Lea también :Cómo crear enlaces rígidos y blandos (enlace simbólico) en sistemas Linux