脚本要求:
1. 编写一个脚本createuser.sh,脚本的执行语法必须是:createuser.sh -u username -m password,选项与参数间可支持多空格,但不能顺序颠倒。当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本。
2. 用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅包含字母数据和下划线"当用户名检测合法后。
3. 判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出”
4. 当用户名不存在,则创建用户,并为该用户设置所指定的密码后以正确输出方式显示“用户username已创建并更新密码”
5. 要求脚本执行过程中不能有非要求的其他输出结果出现。脚本在非正确方式退出时应反回给?参数非0值。
解决步骤:
思想:
看起来问题挺复杂的,无从下手。而我们要把问题分为若干个小的问题去解决,我就简单的把这个脚本分为了以上五个小的模块,然后一个一个去解决它。
- 第一个模块
要求:编写一个脚本createuser.sh,脚本的执行语法必须是:createuser.sh -u username -m password,选项与参数间可支持多空格,但不能顺序颠倒。当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本
#判断是否满足有四个参数
if [ $# -ne 4 ];then
#提示用户输入错误
echo "createuser.sh -u username -m password"
#不满足退出
exit
#第一个参数是否是 -u
elif [ $1 != "-u" ];then
echo "createuser.sh -u username -m password"
exit
#第三个参数是否是 -m
elif [ $3 != "-m" ];then
echo "createuser.sh -u username -m password"
exit
fi
- 第二个模块
要求:用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅包含字母数据和下划线"当用户名检测合法后。
echo $2|egrep -i "^[a-z]+([a-z]*|[_]*|[0-9]*){100}$
就这一句就满足了以上要求不过没有提示用户
^[a-z]+ 用户名字母开头
([a-z]*|[_]*|[0-9]*){100}$ 后边可以为字母 或 下划线 或 数字把他们三个弄成一个整体用{100}表示重复100次直到用户名结尾(只重复了100次,我想也不会有人把用户名设置成100位一上)
- 第三个模块
要求:判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出”
(cat /etc/passwd |cut -d : -f 1|egrep ^$2$ &&
cat /etc/gshadow|grep ^$2:|cut -d : -f2|grep ! &&
echo "$4" | passwd --stdin $2) &>/dev/null && echo $2 " 密码已更新" &&
exit
# &>/dev/null 是把前边命令执行成功或者失败的提示丢掉不显示
# echo "$4" | passwd --stdin $2 把$4第四个参数(passwd)做为密码传递给$2第二个参数(username)
- 第四个模块
要求:当用户名不存在,则创建用户,并为该用户设置所指定的密码后以正确输出方式显示“用户username已创建并更新密码”
(echo $2|egrep -i "^[a-z]+([a-z]*|[_]*|[0-9]*){100}$" &&
useradd $2 &&
echo "$4" | passwd --stdin $2) &>/dev/null &&
echo $2 "已创建并更新密码"||echo "用户名仅包含字母数据和下划线" &&
exit
第四个模块是建立在里一个模块上完成的
- 第五个模块
要求:要求脚本执行过程中不能有非要求的其他输出结果出现。脚本在非正确方式退出时应反回给?参数非0值。
第五个模块就是对上四个模块的一个完善和补充
&>/dev/null 是满足没有其他的输出结果
exit [ ] 是退出返回的错误参数
- 综合
截图:
代码:
#!/bin/bash
# Filename createuser53.sh
# Revision: 1.1
# Date: 2017/8/5
# Author: xin
# ------------------------------------------
#参数是否满足四个
if [ $# -ne 4 ];then
echo "createuser.sh -u username -m password"
exit 1
#第一个参数是否是 -u
elif [ $1 != "-u" ];then
echo "createuser.sh -u username -m password"
exit 2
#第三个参数是否是 -m
elif [ $3 != "-m" ];then
echo "createuser.sh -u username -m password"
exit 2
fi
#判断用户是否存在,若存在是否设置过密码
(cat /etc/passwd |cut -d : -f 1|egrep ^$2$ &&
cat /etc/gshadow|grep ^$2:|cut -d : -f2|grep ! &&
echo "$4" | passwd --stdin $2) &>/dev/null && echo $2 " 密码已更新" &&
exit 4
#用户不存在满足条件创建用户并设置密码
(echo $2|egrep -i "^[a-z]+([a-z]*|[_]*|[0-9]*){100}$" &&
useradd $2 &&
echo "$4" | passwd --stdin $2) &>/dev/null &&
echo $2 "已创建并更新密码"||echo "用户名仅包含字母数据和下划线" &&
exit 5
创建了一个名为 ceshi 密码为:123的用户测试成功