格式 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 ~]#