shell脚本批量添加用户

作业:写一个用户管理脚本,脚本参数,-a -d -p -m -s -h;要求:脚本参数无序也能执行,脚本根据不同状态返回不同状态码,参数错误能报错,短选项要支持连写,不显示多余的信息,用户已存在需提示。vi  ~/.vimrc  set enc=utf8(设置中文可显示)

#!/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

你可能感兴趣的:(Linux基础)