Declaración condicional de programación de shell y declaración de caso

Una prueba de condición

1.1 Prueba de archivo

De acuerdo con el nombre de ruta dado, determine si corresponde a un archivo o directorio. O juzgue si el archivo se puede leer, escribir y ejecutar.
Las opciones comunes de operación de archivos son las siguientes:

Opciones de operación Explicación
-re (Directorio) prueba si es un directorio
-mi (Existe) Prueba si el directorio o archivo existe
-F (Archivo) prueba si es un archivo
-r (Leer) Prueba si el usuario actual tiene permiso para leer
-w (Escritura) Prueba si el usuario actual tiene permiso para escribir
-X (Ejecutar) Prueba si el permiso ejecutable está configurado

Después de ejecutar la operación de prueba de condición, el valor de estado de retorno del comando de prueba se puede obtener a través de la variable predefinida "$?". Si el valor de retorno es 0, significa que se cumple la condición; si el valor de retorno no es 0 (generalmente 1), significa que la condición no es verdadera. Comparación de
Inserte la descripción de la imagen aquí
salida directa
Inserte la descripción de la imagen aquí
entre dos archivos

Opciones de operación Explicación
-Nuevo Testamento Determine si el archivo A es más reciente que el archivo B
-Antiguo Testamento Determine si el archivo A es más antiguo que el archivo B
-ef Determinar si dos archivos son el mismo archivo, usado para determinar si dos archivos apuntan al mismo inodo

Inserte la descripción de la imagen aquí

1.2 Comparación de valores enteros

Opciones de operación Explicación
-eq El primer número entero es igual al segundo número entero
-nacido El primer número no es igual al segundo número
-gt El primer número es mayor que el segundo
-lt El primer número es menor que el segundo
-el El primer número es menor o igual que el segundo número
-dar El primer número es mayor o igual al segundo número

Ejemplo:
Determine el número de usuarios que han iniciado sesión actualmente, genere "demasiados" cuando haya más de 5 y la declaración if
Inserte la descripción de la imagen aquí
extendida
también se puede escribir en este formulario.
Inserte la descripción de la imagen aquí

1.3 Comparación de cadenas

Opciones de operación Explicación
= La primera cadena es la misma que la segunda.
! = La primera cuerda es diferente de la segunda
-con Verifique si la cadena está vacía (cero)

[Cadena 1 = Cadena 2]
[Cadena 1! = Cadena 2]
[-z Cadena]
Inserte la descripción de la imagen aquí
Nota
Cuando hay espacios en ambos lados del signo igual, se deben agregar comillas dobles tanto a la izquierda como a la derecha. Si las comillas dobles no se agregan a la variable izquierda, los lados izquierdo y derecho del signo igual no necesitan espacios.

Dos si declaración

2.1 Estructura de rama única de la declaración if

Para la estructura de selección de rama única, el código correspondiente se ejecutará solo cuando se cumpla la condición; de lo contrario, no se ejecutará ninguna operación. Cuando solo se necesita determinar una situación, se puede utilizar una estructura de rama única.
Inserte la descripción de la imagen aquí

if 条件测试操作 
then
	命令序列
fi

Ejemplo:

a=2
b=1
if [ $a -gt $b ]
then
	echo "$a$b大"
fi

También se puede escribir como una prueba condicional.

[root@localhost ~]# [ $a -gt $b ] && echo "${a}bi${b}da"

Inserte la descripción de la imagen aquí

2.2 Estructura de doble rama de la declaración if

La estructura de selección de doble rama realiza operaciones diferentes para los dos casos de "se cumplen las condiciones" y "no se cumplen las condiciones". Cuando es necesario discutir el resultado de la decisión en dos situaciones, generalmente se adopta una estructura de doble rama.
Inserte la descripción de la imagen aquí

if 条件测试操作 
then
	命令序列1
else
	命令序列2
fi

Ejemplo:

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null	//表示ping3次,每次间隔0.2秒,等待超时3秒;$1表示第一个位置参数
if [ $? -eq 0 ]		//判断前一条命令的返回状态
then
	echo "Host $1 is up."
else
	echo "Host $1 is down."
fi

Escrito como prueba condicional

[root@localhost ~]# [ $? -eq 0 ] && echo "up" || echo "down"

Inserte la descripción de la imagen aquí

2.3 Estructura de múltiples ramas de la declaración if

La estructura de selección de múltiples ramas realiza diferentes operaciones para diversas situaciones. La estructura de múltiples ramas se puede utilizar cuando el resultado de la decisión debe discutirse en tres o más situaciones.
Inserte la descripción de la imagen aquí

if 条件测试操作1 
then
	命令序列1
elif 条件测试操作2
then
	命令序列2
else
	命令序列3
fi

Ejemplo:

#!/bin/bash
read -p "请输入你想考的分数:" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "$GRADE 分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE 分,合格"
else
        echo "$GRADE 分,不及格"
fi

Sentencia condicional

[root@localhost ~]# [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] && echo "$GRADE 分,优秀" || [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] && echo "$GRADE 分,合格" || echo "$GRADE 分,不及格"

Inserte la descripción de la imagen aquí

2.4 El efecto mágico de $ 0

La solidez del programa anterior aún debe mejorarse, ya que al ingresar otras puntuaciones anormales, se mostrará "no calificado" de forma predeterminada. En este momento, puede usar $ 0 para volver al programa actual y obligar al usuario a ingresar una puntuación normal, como una puntuación entre 0-100 .

if语句判断成绩
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
cj(){
    
    
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "$GRADE 分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "$GRADE 分,合格"
else
        echo "$GRADE 分,不及格"
fi
}

if [ $GRADE -gt 100 ] | [ $GRADE -lt 0 ]
then
        echo "please input right number"
        $0
else
        cj
fi

Tres declaraciones de casos

Las declaraciones if de múltiples ramas se pueden reescribir con declaraciones de casos, para que la operación pueda hacer que la estructura sea más clara y más clara
Inserte la descripción de la imagen aquí

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	......
	
*)
	默认命令序列
esac

Ejemplo 1:
Juzgando la clasificación de resultados, debido a que la declaración del caso no puede coincidir con el rango (excepto para [0-9], [az], [AZ]), aquí puede escribir una función juez () para clasificar todos los números en un rango en Un tipo, devuelve el mismo valor y luego usa la declaración de caso para clasificar y juzgar el valor.
Método 1:

#!/bin/bash
read -p "请输入你想考的分数:" GRADE
judge(){
    
    
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
        echo "a"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
        echo "b"
fi						//else可省略
}

case `judge` in			//调用函数judge()
a)
        echo "$GRADE 分,优秀"
        ;;
b)
        echo "$GRADE 分,合格"
        ;;
*)
        echo "$GRADE 分,不及格"
esac

Método 2

#!/bin/bash
read -p "请输入你的成绩:" GRADE
case "$GRADE" in
#[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])
[1-5][0-9]|[0-9])
        echo "你的成绩不合格"
        ;;
6[0-9]|7[0-4])
        echo "你的成绩合格"
        ;;
7[5-9]|8[0-4])
        echo "你的成绩良好"
        ;;
8[5-9]|9[0-9]|100)
        echo "你的成绩优秀"
        ;;
*)
        echo "输入有误"
esac

Ejemplo 2:
use un script de shell para implementar la operación de cambio http.
Inserte la descripción de la imagen aquí
Awk representa el campo de extracción, que se explicará en detalle en el siguiente blog

Supongo que te gusta

Origin blog.csdn.net/cenjeal/article/details/107970330
Recomendado
Clasificación