English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operadores básicos de Shell

Shell, al igual que otros lenguajes de programación, admite varios operadores, incluyendo:

  • Operadores aritméticos

  • Operadores de relación

  • Operadores booleanos

  • Operadores de cadena

  • Operadores de prueba de archivos

bash no admite operaciones matemáticas simples de forma nativa, pero se pueden realizar a través de otros comandos, como awk y expr, siendo expr el más utilizado.

expr es una herramienta de cálculo de expresiones, que permite realizar operaciones de evaluación de expresiones.

Por ejemplo, la suma de dos números (Atención: se utiliza el carácter de contrabarra invertida ` en lugar del apóstrofe simple '):

#!/bin/bash
val=`expr 2 + 2`
echo "La suma de los dos números es: $val"

Ejecutar el script, el resultado de la salida es el siguiente:

La suma de los dos números es: 4

Dos puntos a tener en cuenta:

  •             Debe haber un espacio entre la expresión y el operador, por ejemplo 2+2 Es incorrecto, debe escribirse 2 + 2Esto es diferente de la mayoría de los lenguajes de programación que conocemos.

  •             Una expresión completa debe estar entre comillas dobles `` `, prestando atención a que este carácter no es el apóstrofe común, que se encuentra debajo de la tecla Esc.

Operadores aritméticos

La siguiente tabla enumera los operadores aritméticos comunes, asumiendo que la variable a es 10,la variable b es 20:

                Operadores                Descripción                Ejemplo
                +                Suma                `expr $a + $b` da como resultado 30.
                -                Resta                `expr $a - $b` da como resultado -10。
                *                Multiplicación                `expr $a \* $b` da como resultado  200.
                /                División                `expr $b / $a` da como resultado 2。
                %                Módulo                `expr $b % $a` da como resultado 0.
                =                Asignación                a=$b asignará el valor de la variable b a a.
                ==                Iguales. Se utiliza para comparar dos números, si son iguales devuelve true.                [ $a == $b ] devuelve false.
                !=                No iguales. Se utiliza para comparar dos números, si no son iguales devuelve true.                [ $a != $b ] devuelve true.

Atención:Las expresiones condicionales deben colocarse entre corchetes y deben tener espacios, por ejemplo: [$a==$b] es incorrecto, debe escribirse [ $a == $b ]

Ejemplo en línea

A continuación se muestra un ejemplo de operadores aritméticos:

Ejemplo en línea

#!/bin/bash
# autor: Guía básica
# url:es.oldtoolbag.com
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
   echo "a es igual a b"
fi
if [ $a != $b ]
then
   echo "a no es igual a b"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a no es igual a b

Atención:

  •                     Operador de multiplicación (*Antes de un asterisco (*) debe añadirse un backslash (\) para realizar la operación de multiplicación;

  •                     if...then...fi es una sentencia condicional, que se explicará más adelante.

  • La sintaxis de expr en shell en MAC es la siguiente:$((expresión))Aquí, la expresión dentro de "*"No se necesita el símbolo de escape \

Operadores de relación

Los operadores de relación solo admiten números, no admiten cadenas, a menos que el valor de la cadena sea un número.

La siguiente tabla enumera los operadores de relación comunes, asumiendo que la variable a es 10,la variable b es 20:

                    Operadores                    Descripción                    Ejemplo
                    -eq                    Verifica si dos números son iguales, si son iguales devuelve true.                    [ ${a} -eq ${b}] devuelve false.
                    -ne                    Verifica si dos números son diferentes, si son diferentes devuelve true.                    [ ${a} -ne ${b}] devuelve true.
                    -gt                    Verifica si el número a la izquierda es mayor que el número a la derecha, si es así, devuelve true.                    [ ${a} -gt ${b}] devuelve false.
                    -lt                    Verifica si el número a la izquierda es menor que el número a la derecha, si es así, devuelve true.                    [ ${a} -lt ${b}] devuelve true.
                    -ge                    Verifica si el número a la izquierda es mayor o igual que el número a la derecha, si es así, devuelve true.                    [ ${a} -ge ${b}] devuelve false.
                    -le                    Verifica si el número a la izquierda es menor o igual que el número a la derecha, si es así, devuelve true.                    [ ${a} -le ${b}] devuelve true.

Ejemplo en línea

Los ejemplos de operadores de relación a continuación:

#!/bin/bash
# autor:Sitio web de tutoriales básicos
# url:es.oldtoolbag.com
a=10
b=20
if [ $a -eq ${b}]
then
   echo "${a} -eq ${b}: ${a} es igual a ${b}"
else
   echo "${a} -eq ${b}: ${a} no es igual a ${b}"
fi
if [ $a -ne ${b}]
then
   echo "${a} -ne ${b}: ${a} no es igual a ${b}"
else
   echo "${a} -ne ${b}: ${a} es igual a ${b}"
fi
if [ $a -gt ${b}]
then
   echo "${a} -gt ${b}: ${a} es mayor que ${b}"
else
   echo "${a} -gt ${b}: ${a} no es mayor que ${b}"
fi
if [ $a -lt ${b}]
then
   echo "${a} -lt ${b}: ${a} es menor que ${b}"
else
   echo "${a} -lt ${b}: ${a} no es menor que ${b}"
fi
if [ $a -ge ${b}]
then
   echo "${a} -ge ${b}: ${a} es mayor o igual que ${b}"
else
   echo "${a} -ge ${b}: ${a} es menor que ${b}"
fi
if [ $a -le ${b}]
then
   echo "${a} -le ${b}: ${a} es menor o igual que ${b}"
else
   echo "${a} -echo "${a} > ${b}: ${a} es mayor que ${b}"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

10 -eq 20: ${a} no es igual a ${b}
10 -ne 20: ${a} no es igual a ${b}
10 -gt 20: ${a} no es mayor que ${b}
10 -lt 20: ${a} es menor que ${b}
10 -ge 20: ${a} es menor que ${b}
10 -le 20: ${a} es menor o igual que ${b}

Operadores booleanos

La siguiente tabla enumera los operadores booleanos comunes, asumiendo que la variable a es 10,la variable b es 20:

                    Operadores                    Descripción                    Ejemplo
                    !                    Operación lógica NOT, si la expresión es true devuelve false, de lo contrario devuelve true.                    [ ! false ] devuelve true.
                    -o                    Operación lógica OR, devuelve true si al menos una expresión es true.                    [ ${a} -lt 20 -o ${b} -gt 100 ] devuelve true.
                    -a                    Operación lógica AND, devuelve true solo si ambas expresiones son true.                    [ ${a} -lt 20 -a ${b} -gt 100 ] devuelve false.

Ejemplo en línea

Los ejemplos de operadores booleanos a continuación:

#!/bin/bash
# autor: Guía básica
# url:es.oldtoolbag.com
a=10
b=20
if [ $a != $b ]
then
   echo "$a != $b: a no es igual a b"
else
   echo "${a} == ${b}: ${a} es igual a ${b}"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a menor 100: y $b mayor que 15 : devuelve true"
else
   echo "$a menor 100: y $b mayor que 15 : devuelve false"
fi
if [ $a -lt 100 -o $b -gt 100]
then
   echo "$a menor 100: o $b mayor que 100: devuelve true"
else
   echo "$a menor 100: o $b mayor que 100: devuelve false"
fi
if [ $a -lt 5 -o $b -gt 100]
then
   echo "$a menor 5 o $b mayor que 100: devuelve true"
else
   echo "$a menor 5 o $b mayor que 100: devuelve false"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

10 != 20: a no es igual a b
10 menor que 100: y 20: mayor que 15 : devuelve true
10 menor que 100: o 20: mayor que 100: devuelve true
10 menor que 5 o 20: mayor que 100: devuelve false

Operadores lógicos

A continuación, se presenta el operador lógico de Shell, asumiendo que la variable a es 10,la variable b es 20:

                    Operadores                    Descripción                    Ejemplo
                    &&                    AND lógico                    [[ $a -lt 100 && $b -gt 100 ]] devuelve false
                    ||                    OR lógico                    [[ $a -lt 100 || $b -gt 100 ]] devuelve true

Ejemplo en línea

Los ejemplos de operadores lógicos son los siguientes:

#!/bin/bash
# autor:Sitio web de tutoriales básicos
# url:es.oldtoolbag.com
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "Devuelve true"
else
   echo "Devuelve false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "Devuelve true"
else
   echo "Devuelve false"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

Devuelve false
Devuelve true

Operadores de cadena

La tabla a continuación enumera los operadores de cadena comunes, asumiendo que la variable a es "abc", la variable b es "efg":

                    Operadores                    Descripción                    Ejemplo
                    =                    Detectar si dos cadenas son iguales, devuelve true si son iguales.                    [ $a = $b ] devuelve false.
                    !=                    Detectar si dos cadenas no son iguales, devuelve true si no son iguales.                    [ $a != $b ] devuelve true.
                    -z                    Detectar si la longitud de la cadena es 0, devuelve true si es 0.                    [ -z $a ] devuelve false.
                    -n                    Detectar si la longitud de la cadena no es 0, devuelve true si no es 0.                    [ -n "$a" ] devuelve true.
                    $                    Detectar si la cadena está vacía, devuelve true si no está vacía.                    [ $a ] devuelve true.

Ejemplo en línea

Los ejemplos de operadores de cadena son los siguientes:

#!/bin/bash
# autor:Sitio web de tutoriales básicos
# url:es.oldtoolbag.com
a="abc"
b="efg"
if [ $a = $b ]
then
   echo "$a = $b: a es igual a b"
else
   echo "$a = $b: a no es igual a b"
fi
if [ $a != $b ]
then
   echo "$a != $b: a no es igual a b"
else
   echo "$a != $b: a es igual a b"
fi
if [ -z $a]
then
   echo "}}-z $a: La longitud de la cadena es 0"
else
   echo "}}-z $a: La longitud de la cadena no es 0"
fi
if [ -n "$a"]
then
   echo "}}-n $a: La longitud de la cadena no es 0"
else
   echo "}}-n $a : la longitud de la cadena es 0"
fi
if [ $a ]
then
   echo "$a : la cadena no está vacía"
else
   echo "$a : la cadena está vacía"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

abc = efg: a no es igual a b
abc != efg : a no es igual a b
-z abc : la longitud de la cadena no es 0
-n abc : la longitud de la cadena no es 0
abc : la cadena no está vacía

Operadores de prueba de archivos

Los operadores de prueba de archivos se utilizan para detectar varios atributos de archivos Unix.

La descripción de las propiedades de detección es la siguiente:

                    Operador                    Descripción                    Ejemplo
                    -b file                    Verifica si el archivo es un archivo de dispositivo de bloques, si es así, regresa true.                    [ -b $file ] regresa false.
                    -c file                    Verifica si el archivo es un archivo de dispositivo de caracteres, si es así, regresa true.                    [ -c $file ] regresa false.
                    -d file                    Verifica si el archivo es una carpeta, si es así, regresa true.                    [ -d $file ] regresa false.
                    -f file                    Verifica si el archivo es un archivo común (ni carpeta, ni archivo de dispositivo), si es así, regresa true.                    [ -f $file ] regresa true.
                    -g file                    Verifica si el archivo tiene configurado el bit SGID, si es así, regresa true.                    [ -g $file ] regresa false.
                    -k file                    Verifica si el archivo tiene configurado el bit Sticky Bit, si es así, regresa true.                    [ -k $file ] regresa false.
                    -p file                    Verifica si el archivo es un pipe nombrado, si es así, regresa true.                    [ -p $file ] regresa false.
                    -u file                    Verifica si el archivo tiene configurado el bit SUID, si es así, regresa true.                    [ -u $file ] regresa false.
                    -r file                    Verifica si el archivo es readable, si es así, regresa true.                    [ -r $file ] regresa true.
                    -w file                    Verifica si el archivo es writable, si es así, regresa true.                    [ -w $file ] regresa true.
                    -x file                    Verifica si el archivo es ejecutable, si es así, regresa true.                    [ -x $file ] regresa true.
                    -s file                    Verifica si el archivo está vacío (tamaño del archivo mayor de 0), si no está vacío regresa true.                    [ -s $file ] regresa true.
                    -e file                    Verifica si el archivo (incluyendo la carpeta) existe, si es así, regresa true.                    [ -e $file ] regresa true.

Otros símbolos de verificación:

  • -S: Determinar si un archivo es socket.

  • -L: Detectar si el archivo existe y es un enlace simbólico.

Ejemplo en línea

La variable file representa el archivo /var/www/w3codebox/test.sh, su tamaño es 100 bytes, con rwx Permisos. El siguiente código detectará las diversas propiedades del archivo:
#!/bin/bash
# autor:Sitio web de tutoriales básicos
# url:es.oldtoolbag.com
file="/var/www/w3codebox/test.sh"
if [ -r $file ]
then
   echo "El archivo es readable"
else
   echo "El archivo no es readable"
fi
if [ -w $file ]
then
   echo "El archivo es writable"
else
   echo "El archivo no es writable"
fi
if [ -x $file ]
then
   echo "El archivo es ejecutable"
else
   echo "El archivo no es ejecutable"
fi
if [ -f $file ]
then
   echo "El archivo es un archivo normal"
else
   echo "El archivo es un archivo especial"
fi
if [ -d $file ]
then
   echo "El archivo es un directorio"
else
   echo "El archivo no es un directorio"
fi
if [ -s $file ]
then
   echo "El archivo no está vacío"
else
   echo "El archivo está vacío"
fi
if [ -e $file ]
then
   echo "El archivo existe"
else
   echo "El archivo no existe"
fi

Ejecutar el script, el resultado de la salida es el siguiente:

El archivo es readable
El archivo es writable
El archivo es ejecutable
El archivo es un archivo normal
El archivo no es un directorio
El archivo no está vacío
El archivo existe