Inicio Apuntes FPApuntes DAM Comparar números, cadenas y archivos en Bash Shell Script

Comparar números, cadenas y archivos en Bash Shell Script

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

En este artículo vamos a echar un vistazo a unos pocos conceptos sobre Bash Shell Script. En el siguiente post vamos a aprender a hacer comparaciones entre diferentes tipos de caracteres. Vamos a movernos comparando números, cadenas de texto y comparaciones de archivos utilizando un simple Bash Shell Script.

Cuando te pones a escribir código en bash, las comparaciones en un script son algo muy útil y una de las declaraciones más usadas. Por este motivo creo que es necesario y debemos saber cómo podemos usarlas para hacernos la vida más fácil a la hora de codificar nuestro código y no quedarnos bloqueados.

Sintaxis básica de comparaciones con Bash Shell Script

Sintaxis más básica para realizar comparaciones es la siguiente:

if [condiciones / comparaciones]
    then
         comandos
fi

Un ejemplo

#!/bin/bash
if [2 -gt 3]
then
    echo "2 es el mayor"
else
    echo "2 no es el mayor"
fi;

Esto fue sólo un ejemplo simple de comparación numérica. Vamos a poder utilizar declaraciones o condiciones más complejas en nuestros scripts. Ahora vamos a echar un vistazo a las comparaciones numéricas un poco más detalle.

Comparaciones numéricas

Este es uno de los métodos de evaluación más comunes, es decir, comparar dos o más números. En este ejemplo vamos a crear un script para realizar la comparación numérica. Antes de hacerlo necesitamos conocer los parámetros que se utilizan para comparar valores numéricos. A continuación veremos la lista de parámetros utilizados para las comparaciones numéricas.

    num1 -eq num2 comprueba si el 1er número es igual al segundo número
    num1 -ge núm2 comprueba si el primer número es mayor o igual al segundo número
    num1 -gt num2 comprueba si el primer número es mayor que el segundo número
    num1 -le num2 comprueba si el primer número es menor o igual al segundo número
    num1 -lt num2 comprueba si el primer número es menor que el segundo número
    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, vamos a utilizar estos conocimientos en un script de ejemplo:

#!/bin/bash
#Script para hacer comparaciones numéricas
var1 = 10
var2 = 20
if [$var2 -gt $var1]
    then
        echo "$var2 es mayor que $var1"
fi;
#Segunda comparación
if [$var1 -gt 30]
    then
        echo "$var es mayor que 30"
    else
        echo "$var1 es menor de 30"
fi;

Este es el proceso para hacer comparaciones  numéricas, ahora que cada cual lo complique tanto como quiera. El siguiente punto que vamos a ver es la comparación de cadenas.

Comparaciones de cadenas

Al crear un script de bash, también podríamos estar obligados a comparar dos o más cadenas. En algunos casos comparar cadenas puede ser un poco complicado. Para hacer comparaciones de cadenas, los parámetros utilizados son los siguientes:

    var1 = var2 comprueba si var1 es igual que var2 de cadena
    var1! = var2 comprueba si var1 no es igual que var2
    var1 <var2 comprueba si var1 es menor que var2
    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: – Cualquiera puede haber notado que mayor que, con símbolo (>) y menor que, con símbolo (<) utilizado aquí también se utilizan para la redirección para stdin o stdout en Linux. Esto puede ser un problema cuando estos símbolos se utilizan en nuestros scripts, así que habrá que hacer algo para resolver este problema. La solución es simple, cuando se utiliza cualquiera de estos símbolos en los scripts, deben utilizarse con caracteres de escape, es decir, utilizarlos como «/>» o «/ <«.

Explicado lo anterior, ahora vamos a crear un script haciendo las comparaciones de cadenas.

En la secuencia de comandos, en primer lugar estaremos comprobando la igualdad de cadena. Este script verificará si el nombre de usuario y nuestras variables definidas son los mismos y proporcionará una salida basada en eso.

#!/bin/bash
#Script para hacer comparación de igualdad de cadena
name = sapoclay
if [$USER = $name]
        then
                echo "El usuario existe"
        else
                echo "Usuario no encontrado"
fi;

Ahora vamos a crear otro script que usará «-n» y «-z» con cadenas para comprobar si tienen algún valor

#!/bin/bash
#Script para ver si la variable tiene valor o no
var1 = ""
var2 = sapoclay
if [-n $var1]
        then
                echo "tiene una longitud mayor que cero"
        else
                echo "tiene una longitud de cero"
fi;

Aquí solo usamos el parámetro ‘-n’ pero también podemos usar «-z». La única diferencia es que con ‘-z’, busca la cadena con longitud cero mientras que el parámetro «-n» busca un valor mayor que cero.

Comparación de archivos

Esta podría ser la función más importante de la 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

    -d file comprueba si el archivo existe y es un directorio
    -e file comprueba si el archivo existe en el sistema
    -w archivo comprueba si el archivo existe en el sistema y si es escribible
    -r file comprueba si el archivo existe en el sistema y se lee
    -s verifica si el archivo existe en el sistema y 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 archivo comprueba si el archivo existe y el grupo predeterminado es el mismo que el usuario actual
    -x archivo comprueba si el archivo existe en el sistema y es ejecutable
    file A -nt file B comprueba si el archivo A es más nuevo que el archivo B
    file A -ot file B comprueba si el archivo A es más antiguo que el archivo B

Ahora vamos a ver un script para la comparación de archivos:

#!/bin/bash
#Script para comprobar la comparación de archivos
dir = /home/sapoclay
if [-d $dir]
        then
                echo "$dir es un directorio"
                cd $dir
                ls
        else
                echo "$dir no existe"
fi;

Con estos pocos ejemplos, ya están vistos los conceptos más básicos para la comparación con Bash Shell Script. En el siguiente enlace se podrá consultar un tutorial básico sobre bash shell script para principiantes. Si ya eres usuario avanzado en este lenguaje, no pierdas tu tiempo.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.