Programación Linux Bash Shell (8): Juicio condicional y ejemplos

Programación Linux Bash Shell (8): ejemplos y declaraciones de juicio condicional

  En la sección anterior , aprendimos sobre los comandos relevantes para la interceptación y procesamiento de cadenas, y podemos filtrar e interceptar el flujo de datos de salida del comando. Al comienzo de esta sección, es la parte más crítica de la programación de Bash Shell: sentencias de juicio condicional y control de flujo. En esta sección, primero estamos familiarizados con los diversos tipos y formas de juicio condicional.

Golpe 8

Gramática básica del juicio condicional

  Existen principalmente dos sintaxis básicas para el juicio condicional: comandos basados ​​en la línea de testcomandos y estilos condicionales que son más adecuados para incorporar declaraciones de control de procesos.

  1. comando de prueba El comando de
      prueba ejecuta la sentencia de juicio condicional en forma de una línea de comando sin ninguna salida estándar. El resultado de la ejecución de la sentencia se almacena en una variable predefinida $?( tenga en cuenta que el valor de $? es similar al valor de retorno del programa, no a los datos booleanos , $? 0 es verdadero, 1 es falso ), puede verse directamente con echocomandos, o puede ser llamado por múltiples relaciones lógicas de comando, lo cual está más en línea con los hábitos del usuario, pero es inconveniente de usar en scripts de Shell, y generalmente no se recomienda su uso en Shell
test 条件判断语句
#为了观察实际效果,一般使用echo命令查看$?预定义变量
echo $?
#0为真,1为假

#例如:(判断语句的具体分类在下面讲到)
test -e Hello_World.sh
echo $?
  1. Con []estilos condicionales incluidos

      La función de usar la []condición incluida para juzgar la expresión es la testmisma que la del comando. No adopta la estructura imperativa. Puede integrarse fácilmente en la declaración de control del proceso como condición. El valor de retorno también está en la variable predefinida $?. Excepto por la forma diferente, el resto es testexactamente igual que el comando

    Nota: [] debe tener espacios en ambos lados del interior, de lo contrario se informará un error cuando se ejecute el comando

[ 条件判断语句 ]
#同样使用echo命令查看条件判断语句结果
echo $?
   
#例如:(判断语句的具体分类在下面讲到)
[ -e Hello_World.sh ]
echo $?

Tipo de sentencia de juicio condicional

Juzgando por tipo de archivo

Agregue el nombre del archivo después de la opción para determinar si el tipo de archivo (si existe) cumple con las condiciones. Si el archivo no existe, devolverá falso, y si cumple con las condiciones, devolverá verdadero. El identificador de tipo de archivo específico es similar al primero del atributo de archivo en el resultado del comando ls.

[选项 文件名]
#echo #?
Opciones efecto
-si Determine si el archivo (si existe (lo mismo a continuación)) es un archivo de dispositivo de bloque (es verdadero (lo mismo a continuación))
-C Determinar si el archivo es un archivo de dispositivo de caracteres
-re Determine si el archivo es un archivo de directorio
-mi existe solo juzga si el archivo existe
-F archivo Juzgar si el archivo es un archivo normal
-L Determine si el archivo es un archivo de enlace simbólico
-pags Determine si el archivo es un archivo de canalización
-s Determine si el archivo no está vacío (no vacío es cierto)
-S Determine si el archivo es un archivo de socket

A juzgar por los permisos de archivo

También agregue el nombre del archivo después de la opción, si el permiso es verdadero, si no hay permiso o el archivo no existe, es falso. (Juzgar es la autoridad del usuario actual sobre este archivo)

Opciones efecto
-r Determine si el archivo tiene permiso de lectura
-w Determine si el archivo tiene permiso de escritura
-X Determine si el archivo tiene permiso de ejecución
-u Determine si el archivo tiene permisos SUID
-gramo Determine si el archivo / directorio tiene permisos SGID
-k Determine si el directorio tiene permisos SBIT

Compara la información de dos archivos

Formato: Archivo 1 [Opción] Archivo 2

Opciones efecto
-Nuevo Testamento más reciente que juzga si la última hora de modificación del archivo 1 es posterior al archivo 2, y posterior es verdadera (0)
-Antiguo Testamento mayor que Juez si la última hora de modificación del archivo 1 es anterior al archivo 2, lo cual es cierto (0)
-ef Determine si los números de Inode de los dos archivos son los mismos, que es similar a si los dos archivos son iguales
  • Entre ellos, el Inodenúmero es el número de serie que identifica el archivo. Dos archivos diferentes pueden tener el mismo nombre, pero el número de Inode no puede ser el mismo. Si los dos archivos tienen una relación rígida (guardar como copia, actualización sincronizada), el número de Inode de los dos archivos será el mismo , El resto son diferentes
  • Dos archivos vinculados no tienen signos, excepto el mismo número de Inode. Puede utilizar este método de evaluación para juzgar el vínculo físico

Compara dos enteros

Si se trata de dos variables, no es necesario declararlo en formato entero, sintaxis: entero 1 [opción] entero 2

Opciones efecto
-eq igual Determina si dos enteros son iguales
-nacido no es igual Determina si dos números enteros no son iguales
-gt mayor que juzgar si el entero 1 es mayor que el entero 2
-lt menor que juzgar si el entero 1 es menor que el entero 2
-dar mayor / igual juzgar si el entero 1 es mayor o igual que el entero 2
-el menor / igual juzgar si el entero 1 es menor o igual que el entero 2

Determinar la correlación de cadenas

La gramática está incluida en las opciones. Nota: La comparación de las dos cadenas debe tener espacios en ambos lados del predicado relevante, de lo contrario, el valor de retorno será verdadero de todos modos.

Opciones efecto
-z cadena Determine si la cadena está vacía
-n cadena Determine si la cadena no está vacía
Cadena 1 == cadena 2 Determinar si dos cadenas son iguales
Cadena 1! = Cadena 2 Determinar si dos cadenas no son iguales
  • Cuando la cadena es una variable, si la variable no está definida, también se trata como una cadena vacía.

La relación lógica entre las dos condiciones de juicio

Cuando utilice dos condiciones de juicio al mismo tiempo, preste atención a la relación lógica entre ellas, el formato de las dos condiciones de juicio: condición 1 [opción] condición 2

Opciones efecto
-una AND lógico, ambas condiciones son verdaderas
-Los OR lógico, si una de las dos condiciones es verdadera
! [Condiciones] Negación lógica, invierta el resultado del juicio ( tenga en cuenta que !hay un espacio entre la condición y la condición )

Declaración de juicio condicional utilizada junto con múltiples símbolos de lógica de comando

  Para conocer la secuencia de múltiples comandos y caracteres lógicos, consulte Programación de shell Bash de Linux (3): redirección, múltiples secuencias de comandos, comodines, símbolos especiales

  De hecho, la forma de juzgar si el comando anterior es ejecutado por múltiples secuencias de comandos y símbolos lógicos es juzgar si $?el valor de la variable predefinida es 0, por lo que puede tratar directamente la declaración de juicio condicional como un comando y agregarla a la declaración de secuencia de comando múltiple, y el juicio condicional es verdadero Equivalente a la correcta ejecución del enunciado anterior.


Ejemplo

Ejemplo 1. Determine si el archivo existe:

[ -e ./test.sh ] && echo "File exists" || echo "File not found"
#条件判断语句方括号内侧必须有空格
#该命令执行,若文件存在,显示"File exists";否则显示"File not found"

Ejemplo 2: use la lógica de comandos múltiples para construir un programa de proporción de una sola línea:

#以下为test5.sh中的内容
#!/bin/bash

#Author:Zheng

read -p "a= " a
read -p "b= " b #通过键盘读入a,b数据,请参阅(四)
[ $a -lt $b ] && echo "a<b" || echo "a>=b"

Ejemplo 3: Sentencia de juicio de condiciones múltiples: juzgue si la variable de entrada está vacía y el valor es menor que 10

#以下为test6.sh中内容
#!/bin/bash

#Author: Zheng

read -p "Input a: " a
#若a非空且小于10,则输出Yes
[ -n $a -a $a -lt 10 ] && echo "Yes" || echo "No"
#此脚本中未加入判断a是否为整数的条件,留待改进

índice

En la siguiente sección, Linux Bash Shell Programming (9): Declaración de control de flujo (Parte 1) Declaración de rama (si, caso) , aprenderemos la declaración de control de flujo Bash

La última sección, programación Linux Bash Shell (7): intercepción y procesamiento de cadenas (cut, printf, awk, sed)

Supongo que te gusta

Origin blog.csdn.net/Zheng__Huang/article/details/108025604
Recomendado
Clasificación