#!/bin/bash
pflag=0
##初始标记值pflag为0
shell=/bin/bash
##指定shell类型
set --
`getopt -q hadms:p: $@ `
##对命令行参数进行重新的组织,使参数位置调换也可以识别,使其更便于在脚本中解析
while [ -n
"$1" ];
##当第一个选项为非空时,执行循环
do
case $1 in
##条件语句
-a)
flag=add
##第一个选项为-a,置标志为add
;;
-d)
flag=del
##第一个选项为-d,置标志为del
;;
-s)
shell=$2
##第一个选项为-s,设置shell类型为第二个选项的值
shift
##每执行完一个选项,弹出
;;
-m)
pflag=1
##第一个选项为-m,置标记值pflag为1
password=redhat
#给用户设置默认密码
;;
-p)
pflag=1
##第一个选项为-p,置标记值pflag为1
password=$2
#给用户设置统一密码
shift
#弹出
;;
--)
shift
##第一个选项为--,弹出它,并且终止、退出循环体
break
;;
-h)
echo -e
"Descreption: this script is use to manage user"
echo -e
"\t-a \t\t create the user"
echo -e
"\t-d \t\t delete the user"
echo -e
"\t-p PASSWORD\t set the password of user"
##第一个选项为-h,输出用户提示帮助信息
echo -e
"\t-s SHELL\t set shell of user"
echo -e
"\t-m \t\t set password to default [redhat] "
echo -e
"\t-h \t\t get help"
exit 0
##并且返回 0 状态码
;;
*)
##第一个选项为*,提示错误并引导
echo
"syntax error,use -h to get help"
exit 1
##并且返回 1 状态码
;;
esac
##条件语句结束
shift
##弹出选项
done
if [ $#
-ne 0 ]; then
###如果参数个数不为空,上一条命令执行后的结束代码不是0,则执行下面的命令
user_list=`echo $1 | sed
"s/'//g" ` ###把$1(即参数)值取出,并用sed语句去掉反引号,将结果赋值给user_list
shell=`echo $shell | sed
"s/'//g"` ###把$shell值取出,并用sed语句去掉反引号,将结果赋值给
shell
case $flag
in
##条件语句
add)
if [
$pflag -ne 0 ]; then
##如果pflag不为0(有-m|-p选项)
for user
in `cat $user_list `; do
##取出user_list里的用户
useradd -s
$shell $user
##设置用户名与指定shell类型
echo
"$password" | passwd --stdin $user > /dev/null 2>&1
##将password的值通过管道赋给新加用户,并将输出信息重定向到垃圾桶
echo "user
$user added" ###输出用户已经添加
done
##结束循环
else
echo
"syntax err----define -m or -p PASSWORD"
###如果pflag为0,输出....,并返回状态码1
exit
1
fi
;;
del)
for user
in `cat $user_list`; do
userdel -r
$user
##删除用户,包括邮箱地址那些
echo "user
$user deleted"
done
;;
esac
else
echo
"syntax error,use -h to get help"
fi