Declaración condicional de programación de shell y estructura de bucle
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
salida directa
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 |
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
extendida
también se puede escribir en este formulario.
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]
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.
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"
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.
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"
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.
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 分,不及格"
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
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.
Awk representa el campo de extracción, que se explicará en detalle en el siguiente blog