22.1 选择结构:
1、if语句
单分支、
if:
if CONDITION; then
statement
...
fi
双分支、
if CONDITION; then
statement
...
else
statement
...
fi
多分支
if CONDITION1; then
statement
...
elif CONDITION2; then
statement
...
esle
statement
...
fi
2、case语句:选择结构
case SWITCH in
value1)
statement
...
;;
value2)
statement
..
;;
*)
statement
...
;;
esac
例1
a-z
A-Z
0-9
[abc]
输出不同的对应结果
#!/bin/bash
#
case $1 in
[A-Z])
echo "upper";;
[a-z])
echo "lower";;
[0-9])
echo "number";;
*)
echo "wrong input";;
esac
例2
只识别参数start,stop,restart,status其中之一
#!/bin/bash
#
case $1 in
start)
echo start;;
stop)
echo stop;;
restart)
echo restart;;
status)
echo status;;
*)
echo "The usage is `basename $0` {start|stop|restart|status}";;
esac
例3
写一个脚本,可以接受选项及参数,而后能获取每一个参数,及选项的参数,并能根据选项做出特定的操作,比如
adminusers.sh --add tom.jerry --del tom,jerry -v|--verbose -h|--help
#!/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 's@,@ @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 's@,@ @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 -c -h|--help
其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如
Logged users: 4.
They are:
root tty2 Feb 18 02:41
root pts/1 Mar 8 08:36 (172.16.100.177)
root pts/5 Mar 8 07:56 (172.16.100.177)
hadoop pts/6 Mar 8 09:16 (172.16.100.177)
#!/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
Comments Closed.