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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

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
最后的*)表示默认模式,其中的*相当于通配符
Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/s15212790607/article/details/114329729
Recomendado
Clasificación