先创建文件夹,写入需要创建的用户
cat user1.txt
jinsir 111
编写脚本
cat create_user.sh
#!/bin/bash
if [ $# -eq 0 ]; 判断脚本是否有参数
then
echo "usage: `basename $0` file"
fi
if [ ! -f $1 ];then 判断是否为文件
echo "error file"
fi
#考虑一种特殊情况,如果变量是空行,其解决方法是重新定义分隔符
#希望for处理文件按回车分隔,而不是空格或者tab空格
#IFS 内部字段分隔符
#IFS=$'\n'
#注for循环中有空格怎么处理
#如下:
更改分隔符为换行,在for循环之前修改IFS=$'\n',这样循环就会以换行作为单词分界。以for循环语句实现文件中批量用户创建的脚本为列,考虑到用户文本中空行出现,需要自定义分隔符
#批量创建用户密码
for line in `cat $1`
do
if [ ${#line} -eq 0 ];then # #line 表示line的长度是否等于0
echo "Nothing to do"
continue
fi
user=`echo "$line" | awk '{print $1}'`
pass=$(echo "$line" | awk '{print $2}')
id $user >>/root/1.log 2>&1 #把正确信息和错误信息 放到一起显示出来
if [ $? -eq 0 ];then
echo "user $user zaojiuchaungjian"
else
useradd $user
if [ $? -eq 0 ];then
echo "this is $user ok"
fi
echo "$pass" |passwd --stdin $user >> pass.log 2>&1
if [ $? -eq 0 ];then
echo "this is $pass ok"
fi
fi
done
#批量创建用户密码 思路
1、先判断脚本后面是否添加了参数 没有添加报错“usage: `basename $0` file” 如果添加了,
2、再次进行判断这个参数是否为文件 没有添加报错“error file”
3、如果是文件 则执行for循环 判断脚本后面跟的参数是否等于0 如果等于 继续执行,如果不等于则报错“Nothing to do”
4、如果等于 继续执行 筛选出 第一行 返回的值是否等于0 不等于0 进行用户创建 如果 等于0 则你的用户早就创建了
5、由于刚学习(添加密码的命令出错了 为了看到问题 我多添加了一if判断条件)
6、如果用户创建成功 那么返回的值为0 告诉我“this is $user ok” 再次执行添加用户密码 如果添加成功 那么返回的值还是0 告诉我this is $pass ok。