bash选择结构case语句

bash脚本case语句

case语句:
变量和常量比较,若不等则继续往下比较,如果最后不匹配则使用兜底结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case SWITCH in
value1)
statement
...
;;
value2)
statement
...
;;
*)
statement
...
;;
esac

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#
case $1 in
[0-9])
echo "digit"
;;
[a-z])
echo "Lower"
;;
[A-Z])
echo "Upper"
;;
*)
echo "Special character"
esac

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#
case $1 in
'start')
echo "start server ..."
;;
'stop')
echo "stop server ..."
;;
'status')
echo "Running ..."
;;
*)
echo "basename $0 {start|stop|restart|startus}"
;;
esac

示例3:
接受选项及参数,而后能获取每一个选项,及选项的参数,并能根据选项及桉树做出特定的操作。比如:
adminuser.sh –add tom,jerry –del tom,blair -v|–verbose -h|–help

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
for I in seq 0 $#; do
if [ $# -gt 0 ]; then
case $1 in
-v|--verbose)
DEBUG=1
shift ;;
-h|--help)
echo "Usage: basename $0 --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 0
;;
--add)
ADD=1
ADDUSERS=$2
shift 2
;;
--del)
DEL=1
DELUSERS=$2
shift 2
;;
*)
echo "Usage: basename $0 --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 7
;;
esac
fi
done
if [ $ADD -eq 1 ]; then
for USER in echo $ADDUSERS | sed '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4c3f0c">[email protected]</a>,@ @g'; do
if id $USER &> /dev/null; then
[ $DEBUG -eq 1 ] && echo "$USER exists."
else
useradd $USER
[ $DEBUG -eq 1 ] && echo "Add user $USER finished."
fi
done
fi
if [ $DEL -eq 1 ]; then
for USER in echo $DELUSERS | sed '<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e596a5">[email protected]</a>,@ @g'; do
if id $USER &> /dev/null; then
userdel -r $USER
[ $DEBUG -eq 1 ] && echo "Delete $USER finished."
else
[ $DEBUG -eq 1 ] && echo "$USER not exist."
fi
done
fi

示例4:
写一个脚本showlogged.sh,其用法格式为:
showlogged.sh -v -v -h|–help
其中,-h选项只能单独使用,业内关于显示帮助信息;-c选项时,显示当前期待能够上登录的所有用户数;如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
#
declare -i SHOWNUM=0
declare -i SHOWUSERS=0
for I in seq 1 $#; do
if [ $# -gt 0 ]; then
case $1 in
-h|--help)
echo "Usage: basename $0 -h|--help -c|--count -v|--verbose"
exit 0 ;;
-v|--verbose)
let SHOWUSERS=1
shift ;;
-c|--count)
let SHOWNUM=1
shift ;;
*)
echo "Usage: basename $0 -h|--help -c|--count -v|--verbose"
exit 8 ;;
esac
fi
done
if [ $SHOWNUM -eq 1 ]; then
echo "Logged users: who | wc -l."
if [ $SHOWUSERS -eq 1 ]; then
echo "They are:"
who
fi
fi