case判斷

格式 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 ~]#
相關文章
相關標籤/搜索