Declarações condicionais shell-if e case
1. Teste de condição
1. Teste de arquivo e teste inteiro
1. O comando de teste
Teste se a expressão está estabelecida, se for estabelecida, retorne 0, caso contrário retorne outros valores
Formato 1: teste a expressão condicional
Formato 2: [expressão condicional]
2. Teste de arquivo
Teste de arquivo
[Arquivo de operador ou diretório]
Operadores de teste comuns
-d: testa se é um diretório (Diretório)
-e: testa se existe um diretório ou arquivo (Exist)
-f: testa se é um arquivo (Arquivo)
-r : test O usuário atual tem permissão para ler (Ler)
-w: Testa se o usuário atual tem permissão para escrever (Gravar)
-x: Testa se o usuário atual tem permissão para executar (eXcute)
Operadores de teste comumente usados
[ -d /medialcdrom]
echo $?
0 #0表示条件成立
[ -d lmedialcdromlServer]
echo $?
0 #1表示条件不成立
[ -d /medialcdrom ] && echo "YES" #&&逻辑与,而且的意思
YES
3. Comparação de valores inteiros
[Operador Inteiro 1 Inteiro 2]
Operadores de teste comumente usados
-eq: igual a (Igual)
-ne: diferente de (
Diferente ) -gt: maior que (Maior que)
-lt: menor que (Menor que)
-le: menor ou igual a (menor ou igual)
-ge:
Operador de teste comumente usado maior ou igual
who | wc -l
1
[ $(who ] wc -l) -gt 5 ] && echo "Too many." #用户数是否>5
Too many.
[ $(who | wc -l) -ge 10 ] && echo "> = 10." #用户数是否>=10
[root@localhost ~]# FreeCC=$(free -rli | grep "Mem: " | awk "{print $4}')
[root@localhost ~]#[ $FreeCC -lt 1024] && echo ${FreeCCMB #空闲内存是否<1024MB
275MB
2. Teste de string e teste lógico
1. Comparação de strings
Formato 1
[String 1 = String 2]
[String 1! = String 2]
Formato 2
[-z String]
Operadores de teste comumente usados
=: o conteúdo da string é o mesmo
! =: O conteúdo da string é diferente ,! Sinal Significa o significado oposto-
z: o conteúdo da string está vazio
2. Teste de lógica
Formato 1
[Expressão 1] Operador [Expressão 2] ...
Formato 2
[Comando 1 Comando do operador 2] ...
Operadores de teste comumente usados
-a ou &&: AND lógico, "e" significa
-o ou |: lógico Ou, o significado de "ou" T: lógico não
[-d / etc] && [-r / etc] && echo "Você pode abri-lo"
[-d / etc] ll [-d / home] && echo "ok"
Dois, se declaração
1. Se declaração de filial única
Formato de instrução de ramo único
se operação de teste condicional
,
sequência de comando
fi
3种命令序列
①
if [ 3 -gt 2 ]
> then
> echo "yes"
> fi
yes
②
if [ 3 -gt 2 ]; then echo "yes"; fi
yes
③
[ 3 -gt 2 ] && echo "yes"
yes
2. Se declaração de dupla ramificação
Formato de instrução de ramificação dupla
se operação de teste condicional
,
sequência de comando 1, caso
contrário,
sequência de comando 2
fi
#!/bin/bash
netstat -natp | grep ":80" &> /dev/null
if [ $? -eq 0 ]
then
echo "httpd服务已在运行"
else
echo "httpd未运行,请启动服务"
echo "systemctl restart httpd"
fi
3. Se declaração multi-ramo
Formato de instrução multi-ramificação
se operação de teste condicional 1, em
seguida, seqüência de comando 1
elif operação de teste condicional 2, em
seguida, seqüência de comando 2, caso
contrário,
seqüência de comando 3
fi
#!/bin/bash
read -p "请输入你的分数:" score
if [ $score -ge 85 -a $score -le 100 ]then
echo "你的分数为: ${score} ,优秀!"
elif [ $score -ge 70 ] &&[ $score -lt 85 ];then
echo "你的分数为: ${score} ,一般般"
elif [[ score -lt 70 && $score -ge 0 ]];then
echo "你的分数为: ${score} ,30遍!"
else
echo "输入有误,请重新输入!"
fi
Três, declaração de ramo de caso
1. Estrutura de múltiplas ramificações do caso
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
*)
默认命令序列
esac
case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号")"结束
②双分号";;"表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
最后的*)表示默认模式,其中的*相当于通配符
2. Exemplos
Solicita ao usuário que insira as pontuações do teste, exigindo que as pontuações de 0-75 sejam ruins; 70-85 sejam a média; 85 a 100 sejam excelentes. Se você inserir outros caracteres, será solicitado. Se houver um erro, digite-o novamente.
método um
#!/bin/bash
read -p "请输入你的分数(0-100):" x
[ $x -ge 85 -a $x -le 100 ] && a="1" &> /dev/null
[ $x -ge 70 ] && [ $x -lt 85 ] && a="2" &> /dev/null
[[ $x -lt 70 && $x -ge 0 ]] && a="3" &> /dev/null
case $a in
1)
echo "你的分数为$x ,优秀"
;;
2)
echo "你的分数为$x,一般般"
;;
3)
echo "你的分数为$x,30遍!"
;;
*)
echo "输入有误,请重新输入!"
esac
Método Dois
#!/bin/bash
read -p "请输入你的分数(0-100):" x
case $x in
8[5-9]|9[0-9]|100)
echo "你的分数为${x} ,优秀"
;;
8[0-4]|7[0-9])
echo "你的分数为${x},一般般"
;;
[0-9]|0[1-6][0-9])
echo "你的分数为${x},30遍!"
;;
*)
echo "输入有误,请重新输入!"
esac