English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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 ]。
A continuación se muestra un ejemplo de operadores aritméticos:
#!/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 \
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. |
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}
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. |
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
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 |
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
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. |
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
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.
#!/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