Los corchetes en Shell (incluyendo los corchetes simples y los dobles) se pueden utilizar para probar algunas condiciones:
- Comparación aritmética, por ejemplo, si una variable es 0,
[ $var -eq 0 ]。 - Prueba de atributos de archivo, por ejemplo, si un archivo existe,
[ -e $var ], si es un directorio,[ -d $var ]。 - Comparación de cadenas, por ejemplo, si dos cadenas son iguales,
[[ $var1 = $var2 ]]。
[] a menudo puede sustituirse por el comando test, como se verá más adelante.
Comparación aritmética
Realizar juicios aritméticos condicionales sobre variables o valores:
[ $var -eq 0 ] # 当 $var 等于 0 时,返回真 [ $var -ne 0 ] # 当 $var 不等于 0 时,返回真
Tenga en cuenta que debe haber un espacio entre [ y ] y los operandos, de lo contrario se producirá un error. Por ejemplo, lo siguiente dará un error:
[$var -eq 0 ] o [ $var -ne 0]
Otros operadores de comparación:
| Operador | Significado |
|---|---|
| -gt | Mayor que |
| -lt | Menor que |
| -ge | Mayor o igual que |
| -le | Menor o igual que |
Se pueden combinar múltiples condiciones mediante -a (and) u -o (or) para realizar pruebas:
[ $var1 -ne 0 -a $var2 -gt 2 ] # 使用逻辑与 -a [ $var1 -ne 0 -o $var2 -gt 2 ] # 使用逻辑或 -o
Pruebas de atributos del sistema de archivos
Use diferentes indicadores de condición para probar diferentes atributos del sistema de archivos.
| Operador | Significado |
|---|---|
[ -f $file_var ] |
Si la variable $file_var es una ruta de archivo o nombre de archivo normal (file), devuelve verdadero. |
[ -x $var ] |
Si el archivo contenido en la variable $var es ejecutable (execute), devuelve verdadero. |
[ -d $var ] |
Si el archivo contenido en la variable $var es un directorio (directory), devuelve verdadero. |
[ -e $var ] |
Si el archivo contenido en la variable $var existe (exist), devuelve verdadero. |
[ -c $var ] |
Si el archivo contenido en la variable $var es una ruta a un archivo de dispositivo de caracteres (character), devuelve verdadero. |
[ -b $var ] |
Si el archivo contenido en la variable $var es una ruta a un archivo de dispositivo de bloques (block), devuelve verdadero. |
[ -w $var ] |
Si el archivo contenido en la variable $var es escribible (write), devuelve verdadero. |
[ -r $var ] |
Si el archivo contenido en la variable $var es legible (read), devuelve verdadero. |
[ -L $var ] |
Si el archivo contenido en la variable $var es un enlace simbólico (link), devuelve verdadero. |
El método de uso es el siguiente:
fpath="/etc/passwd" if [ -e $fpath ]; then echo File exits; else echo Does not exit; fi
Comparación de cadenas
Al comparar cadenas, es mejor usar corchetes dobles [[ ]]. Debido a que los corchetes simples pueden causar algunos errores, es mejor evitarlos.
Comprobar si dos cadenas son iguales:
[[ $str1 = $str2 ]]
Cuando str1 es igual a str2, devuelve verdadero. Es decir, str1 y str2 contienen el mismo texto. El signo igual simple también puede escribirse como doble signo igual; es decir, la comparación de cadenas anterior es equivalente a [[ $str1 == $str2 ]].
Tenga en cuenta que debe haber un espacio antes y después de =. Si olvida agregar el espacio, se convierte en una sentencia de asignación, no en una comparación.
Otros casos de comparación de cadenas:
| Operador | Significado |
|---|---|
[[ $str1 != $str2 ]] |
Si str1 y str2 no son iguales, devuelve verdadero. |
[[ -z $str1 ]] |
Si str1 es una cadena vacía, devuelve verdadero. |
[[ -n $str1 ]] |
Si str1 es una cadena no vacía, devuelve verdadero. |
Usando los operadores lógicos && y || se pueden combinar fácilmente múltiples condiciones, por ejemplo:
str1="Not empty" str2="" if [[ -n $str1 ]] && [[ -z $str2 ]]; then echo str1 is nonempty and str2 is empty string. fi
El comando test también se puede usar para realizar detecciones de condiciones. Con test se puede evitar el uso excesivo de corchetes; las condiciones de prueba en [] también pueden realizarse mediante test.
if [ $var -eq 0 ]; then echo "True"; fi
Equivalente a:
if test $var -eq 0; then echo "True"; fi
Autor: liuchengxu_
Original: https://blog.csdn.net/simple_the_best/article/details/75915767