码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 脚本之用户创建

时间:2017-08-06 10:36:07      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:linux   脚本   创建   

脚本要求

   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的用户测试成功

Linux 脚本之用户创建

标签:linux   脚本   创建   

原文地址:http://13148585.blog.51cto.com/13138585/1953832

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!