About foundation
Scripting is divided into:
面向过程 选择结构:if语句,单分支、双分支、多分支;case语句
控制结构:顺序结构(默认)
循环结构:for、while、until
面向对象
case statement structure
case VAR_NAME in
var_value1) #value被当做字符一个一个进行比较的;可以使用a-z,A-Z,0-9,[abc]
statement1
...
;;
var_value2)
statement2
...
;;
*)
statement
...
;;
esac
case examples
Example1:
#!/bin/bash
case $1 in
'start')
echo "start service...."
;;
'stop')
echo "stop service...."
;;
'restart')
echo "restart service....."
;;
'status')
echo "Running...."
;;
*)
echo "`basename $0` (start|stop|restart|status)" #`basename $0` 表示脚本本身名
;;
esac
当$1参数值为上面4个中的一个时,执行每个字符下的语句;如果上面哪个字符都不匹配,则执行 *) 下的语句
Example2:
#!/bin/bash
ADD=0
DEL=0
DEBUG=0
for i in `seq $#`;do
case $1 in
-v|--verbose)
DEBUG=1 #输入指定字符,设置变量值,并且使用shift,把当前的$1踢掉,$2变为$1,$3变为$2;这样方便执行循环,这样case可以一直判断$1
shift
;;
-h|--help)
echo "Usage: `basename $0` -v|--verbose --add USER_LIST --del USER_LIST -h|--help"
exit 7
;;
--add)
ADD=1
ADDUSER=$2
shift
;;
--del)
DEL=1
DELUSER=$2 #此位置变量指定需要删除或者添加的用户名
shift
;;
*)
exit 8 #上面都不匹配,执行此条,防止一直循环判定不匹配的$1
;;
esac
if [ $ADD -eq 1 ];then
for USER in `echo "$ADDUSER"|sed -n 's/,/ /gp'`;do #取出用户名作为循环的列表
if id $USER &>/dev/null;then
[ $DEBUG -eq 1 ] && echo "$USER exists" #如果执行脚本时添加了-v,则用户存的话进行打印提示信息,不添加-v参数则不进行打印
else
useradd $USER
[ $DEBUG -eq 1 ] && echo "create $USER finished" #如果执行脚本时添加了-v参数,则创建完用户进行提示,不添加参数则不打印提示信息
fi
done
fi
if [ $DEL -eq 1 ];then #如果执行脚本添加了--del参数,则上面的DEL变量值为1,值为1就进行下面的循环
for USER in `echo "$DELUSER"|sed -n 's/,/ /gp'`;do #取出$2中的用户名
if id $USER &>/dev/null;then
userdel -r $USER
[ $DEBUG -eq 1 ] && echo "delete $USER finished" #执行脚本时添加了-v参数,则显示相关提示信息,反之则不显示
else
[ $DEBUG -eq 1 ] && echo "$USER not exists" #执行脚本时添加-v参数,把DEBUG变量值变为1,则此条判断成立,执行后面的语句
fi
done
fi
done
如果前面加上-v则显示添加过程,不添加-v就不显示,--add user1,xxxxx进行添加用户;--del user1,txwxx删除这些用户,-h查看帮助