脚本要求:

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 ”后退出脚本

1f5eb22c8f54dc4b3b6e198ecc63e30f.png

#判断是否满足有四个参数

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第二个模块

要求:用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅包含字母数据和下划线"当用户名检测合法后。

4c657a25797740f30d934f1016011da9.png

echo $2|egrep -i "^[a-z]+([a-z]*|[_]*|[0-9]*){100}$

就这一句就满足了以上要求不过没有提示用户

^[a-z]+ 用户名字母开头

([a-z]*|[_]*|[0-9]*){100}$  后边可以为字母 或 下划线 或 数字把他们三个弄成一个整体用{100}表示重复100次直到用户名结尾(只重复了100次,我想也不会有人把用户名设置成100位一上)第三个模块

要求:判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出”

7f235fe886af32bedb77f8677fff9d13.png

(cat /etc/passwd |cut -d : -f 1|egrep ^$2$ &&

cat /etc/shadow|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已创建并更新密码”

bb0cabebc6ad41c6d15d5146a285c7a1.png

(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 [ ] 是退出返回的错误参数综合

截图:

bceafa2792e6db8a7c2e985105e093bc.png

代码:

#!/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/shadow|grep ^$2:|cut -d : -f2|grep !  &&

echo "$4" | passwd --stdin $2) &>/dev/null && echo $2 " 密码已更新" &&

exit 4 || exit

#用户不存在满足条件创建用户并设置密码

(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

5d2a6a1945b6d26d2ed58c276a7e6f21.png

创建了一个名为 ceshi 密码为:123的用户测试成功

Logo

更多推荐