格式 case 變量名 in value1) command ;; value2) command ;; *) commond ;; esac
咱們來看network的配置文件中有這樣一段shell
# vim /etc/init.d/network
#命令/etc/init.d/network start中start是它的第一個參數,取$1就是取start所在位置的值 case "$1" in start) //這裏表示當第一個參數爲start時,要作什麼 中間代碼段省略 ;; stop) //這裏表示當第一個參數爲stop時,要作什麼 中間代碼段省略 ;; status) //這裏表示當第一個參數爲status時,要作什麼 echo $"Configured devices:" echo lo $interfaces echo $"Currently active devices:" echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }') ;; restart|reload|force-reload) //這裏表示當第一個參數爲restart或reload或force-reload時,要作什麼 cd "$CWD" $0 stop $0 start rc=$? ;; *) //這裏表示當第一個參數爲除上面值之外的值時,要作什麼 echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" exit 2 esac
在case程序中,能夠在條件中使用|,表示或的意思, 好比vim
2|3) command ;;
首先咱們來執行下test.shbash
[root@lijie-01 ~]# cat test.sh #!/bin/bash #read命令是讓用戶輸入並讀取到用戶輸入的值 read -p "Please input a number: " n #下面表示當n的值爲空時提示須要輸入一個數值,並返回一個值1來表示狀態 if [ -z "$n" ] then echo "Please input a number." exit 1 fi [root@lijie-01 ~]# read -p "Please input a number: " n Please input a number: sf //這裏輸入的是sf,則n的值爲sf [root@lijie-01 ~]# echo $n sf [root@lijie-01 ~]# sh test.sh Please input a number: //這裏沒有任何輸入,系統提示Please input a number.並返回值1 Please input a number. [root@lijie-01 ~]# echo $? 1
下面咱們來寫一個shell小案例rest
#!/bin/bash read -p "Please input a number: " n if [ -z "$n" ] then echo "Please input a number." exit 1 fi #這裏表示判斷用戶輸入的n值是不是純數字,就是將n中的所有數字找到而後替換爲空,若是爲純數字,則n1最終結果爲空 n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] //判斷n1是否不爲空,若是不爲空,則說明輸入的n值不是純數字 then echo "Please input a number." exit 1 fi if [ $n -lt 60 ] && [ $n -ge 0 ] then tag=1 elif [ $n -ge 60 ] && [ $n -lt 80 ] then tag=2 elif [ $n -ge 80 ] && [ $n -lt 90 ] then tag=3 elif [ $n -ge 90 ] && [ $n -le 100 ] then tag=4 else tag=0 fi case $tag in 1) echo "不及格" ;; 2) echo "及格" ;; 3) echo "良好" ;; 4) echo "優秀" ;; *) echo "The number range is 0-100." ;; esac
而後來執行這個case.sh的腳本,分別輸入學生的不一樣成績,查看結果code
[root@lijie-01 ~]# sh -x case.sh + read -p 'Please input a number: ' n Please input a number: 101 //當輸入的數字爲101時的執行過程 + '[' -z 101 ']' ++ sed 's/[0-9]//g' ++ echo 101 + n1= + '[' -n '' ']' + '[' 101 -lt 60 ']' + '[' 101 -ge 60 ']' + '[' 101 -lt 80 ']' + '[' 101 -ge 80 ']' + '[' 101 -lt 90 ']' + '[' 101 -ge 90 ']' + '[' 101 -le 100 ']' + tag=0 + case $tag in + echo 'The number range is 0-100.' The number range is 0-100. [root@lijie-01 ~]# sh -x case.sh + read -p 'Please input a number: ' n Please input a number: 77 + '[' -z 77 ']' ++ sed 's/[0-9]//g' ++ echo 77 + n1= + '[' -n '' ']' + '[' 77 -lt 60 ']' + '[' 77 -ge 60 ']' + '[' 77 -lt 80 ']' + tag=2 + case $tag in + echo $'\345\217\212\346\240\274' 及格 [root@lijie-01 ~]# sh -x case.sh + read -p 'Please input a number: ' n Please input a number: 90 + '[' -z 90 ']' ++ echo 90 ++ sed 's/[0-9]//g' + n1= + '[' -n '' ']' + '[' 90 -lt 60 ']' + '[' 90 -ge 60 ']' + '[' 90 -lt 80 ']' + '[' 90 -ge 80 ']' + '[' 90 -lt 90 ']' + '[' 90 -ge 90 ']' + '[' 90 -le 100 ']' + tag=4 + case $tag in + echo $'\344\274\230\347\247\200' 優秀 [root@lijie-01 ~]# sh -x case.sh + read -p 'Please input a number: ' n Please input a number: sfse + '[' -z sfse ']' ++ echo sfse ++ sed 's/[0-9]//g' + n1=sfse + '[' -n sfse ']' + echo 'Please input a number.' Please input a number. + exit 1 [root@lijie-01 ~]#