先创建文件夹,写入需要创建的用户
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。