case判断

 格式 case  变量名 in  
                      value1)   
                          command
                          ;;
                     value2)
                          command
                          ;;
                      *)
                        commond
                            ;;
                      esac

我们来看network的配置文件中有这样一段

# 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程序中,可以在条件中使用|,表示或的意思, 比如

    2|3)
     command
    ;;

首先我们来执行下test.sh

[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小案例

 #!/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的脚本,分别输入学生的不同成绩,查看结果

[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 ~]# 

猜你喜欢

转载自my.oschina.net/u/3746774/blog/1798204