结合前一篇文章的的理论知识,动手写for条件语句案例
理论知识
案例要求:从列表文件读取用户名,逐个创建用户,并将密码设置
新建用户文件 users.txt
[root@oracle tmp]# vi users.txt
andy
barry
xiehao
xh
创建案例脚本,其实很简单,主要将一些细节,在备注里面进行了解释。
[root@oracle tmp]# vi user.sh
#!/bin/bash
read -p "请输入密码:" PASSWD
#for 一个值 in ``的写法需要注意,第一次出现的变量,没有$
#后面的范围cat /tmp/users.txt 外部用的不是单引号,而是反单引号
#因为在bash解释器中:\反斜杠,代表转义后面单个字符
#单引号''是转义所有字符,双引号""代表变量依然生效
#只有反引号``才代表执行命令语句,此处容易出错,初学需要特别铭记
for USERNAME in `cat /tmp/users.txt`
do
#这里运用了一个命令 id 用户名 的形式,如果存在该用户,则会正常执行该命令
#如果不存在该用户,则不能执行成功该命令。利用$?变量是否为0 便可以判断用户是否存在
#&>> 表示不管执行成功与否,正确和错误的信息都会追加到123.txt文本中
id $USERNAME &>>/tmp/123.txt
if [ $? -eq 0 ]
then
echo "此用户$USERNAME已存在,不需要设置密码"
else
useradd $USERNAME &>> /tmp/1234.txt
#echo “新密码”|passwd --stdin 用户名
#--stdin这个选项用于从标准输入管道读入新的密码
#使用 echo 方式来确定用户密码
echo "$PASSWD" | passwd --stdin $USERNAME &>> /tmp/12345.txt
#再进行if判断
if [ $? -eq 0 ]
then
echo "密码创建成功"
else
echo "密码创建失败"
fi
fi
done
执行结果:
[root@oracle tmp]# sh user.sh
请输入密码:123456
密码创建成功
密码创建成功
密码创建成功
此用户xh已存在,不需要设置密码
为了验证正确性,其实这些用户在第一次执行该脚本的时候,已经被创建成功了
在执行一遍,看一下运行结果:
[root@oracle tmp]# sh user.sh
请输入密码:123456
此用户andy已存在,不需要设置密码
此用户barry已存在,不需要设置密码
此用户xiehao已存在,不需要设置密码
此用户xh已存在,不需要设置密码
说明脚本没问题