Shell第一个脚本-添加用户

题目要求:

  • 添加用户
  • 用户密码同用户名
  • 静默运行脚本
  • 避免捕获用户接口
  • 程序自定义输出

需求分析:

1.添加用户(添加的用户在/home/目录下)

[root@node1 home]# useradd zhangsan

2.设置密码:

[root@node1 home]# passwd zhangsan
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@node1 home]# 

3.静默运行脚本

设置密码的提示信息,没必要显示

4.避免捕获用户接口

运行期间,不能操作。

关键在于passwd,type passwd提示它是外部命令:passwd is hashed (/usr/bin/passwd)
通过man passwd,重点关注一个“–stdin”

[root@node1 home]# man passwd
[root@node1 home]# echo "zhangsan" | passwd --stdin zhangsan
更改用户 zhangsan 的密码 。
passwd: 所有的身份验证令牌已经成功更新。

5.自定义输出

当用户添加成功后,提示用户已经添加成功了。

案例实现:

用户名是作为参数传入进来的:

#! /bin/bash
useradd $1
echo $1 | passwd --stdin $1
echo "user add success!"

当然,别忘了给它一个执行的权限:

chmod +x adduser.sh

接下来我们来试着执行下:

[root@node1 shell]# ./adduser.sh wangwu
更改用户 wangwu 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
user add success!
[root@node1 shell]# 

还有点小瑕疵,根据需求3,多了两行输出。并且现在还有bug,只是在理想环境下,譬如我不输入用户名,就gg了。接下来,我们来慢慢完善我们的脚本。

脚本完善

我们面对是有2个问题,控制台多余2行输出和无参数运行bug。

1.完善控制台多余输出bug

控制台多余的2行输出,是passwd造成的,我们只需要用重定向,把它的多余输出信息通过重定向输出到别的地方就可以了。

#! /bin/bash
useradd $1
echo $1 | passwd --stdin $1 >&/dev/null
echo "user add success!"

">&"是重定向符号,不熟悉的可以点此查看。 /dev/null目录可以理解为是一个黑洞,可以吸收任何东西,但不会输出。

好了,接下来我们来验证一下:

[root@node1 shell]# ./adduser.sh hadoop
user add success!

ok!我们只需把剩下的精力对付传参数这一块即可!

2.完善参数问题的bug

无参数、参数过多都不可以,必须得是一个参数!先限制参数个数:

[ $# -eq 1 ] 判断参数个数

#! /bin/bash
[ ! $# -eq 1 ] && echo "args error!!!" &&  exit 2
useradd $1
echo $1 | passwd --stdin $1 >&/dev/null
echo "user add success!"

别着急,还有另一个问题:假如用户已经存在了怎么办?(思路:根据id zhangsan和echo $?来搞)

id $1 >&/dev/null && echo "user exist!!!" && exit3  #把id $1的判断信息扔进“黑洞”,如果用户已经存在了,就执行退出

还有,普通用户是不能添加用户的,没有对应的权限:

useradd $1 && echo $1 | passwd --stdin $1 >&/dev/null && echo "user add success!" && exit 4

完整脚本如下:

#! /bin/bash
[ ! $# -eq 1 ] && echo "args error!!!" &&  exit 2
id $1 >&/dev/null && echo "user exist!!!" && exit3
useradd $1 >&/dev/null && echo $1 | passwd --stdin $1 >&/dev/null && echo "user add success!" && exit 4
echo "user add fail" && exit 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值