a、创建用户文件,因为添加的用户比较多,因此编写脚本创建一个用户文件user.txt
#!/bin/bash
#创建九个用户名和对应的密码
for i in `seq 9`
do
echo "user$i passwd$i">>user.txt
done
b、创建好用户文件后,开始添加。
1、使用的命令useradd,passwd。
2、使用的循环是多种的,for,while,until,而读取的是行,所以使用for或着while
它们的区别呢?看看下面的实例
#!/bin/bash
count=0
for line in `cat user.txt`
do
echo $line
let count+=1
done
echo $count
结果:
user1
passwd1
user2
passwd2
user3
passwd3
user4
passwd4
user5
passwd5
user6
passwd6
user7
passwd7
user8
passwd8
user9
passwd9
18
#!/bin/bash
count=0
while read line
do
echo $line
let count+=1
done < user.txt
echo $count
结果:
user1 passwd1
user2 passwd2
user3 passwd3
user4 passwd4
user5 passwd5
user6 passwd6
user7 passwd7
user8 passwd8
user9 passwd9
9
观察发现,while具有更好的读取行的特性。for循环读取文件时,会使用任何空白字符作为其读取的分割符,而while使用的是换行符。如果,使用的是其他的分割符,则两者都可以。
3、截取行,分离用户名和密码。
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
echo $user":"$passwd
done < user.txt
注意:指定-d,默认是制表符
4、截取出来之后就是添加用户和密码了
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user
passwd $passwd
done < user.txt
结果:
输入新的 UNIX 密码: 重新输入新的 UNIX 密码: Sorry, passwords do not match
passwd:认证令牌操作错误
passwd:密码未更改
输入新的 UNIX 密码: 重新输入新的 UNIX 密码: Sorry, passwords do not match
passwd:认证令牌操作错误
passwd:密码未更改
输入新的 UNIX 密码: 重新输入新的 UNIX 密码: Sorry, passwords do not match
passwd:认证令牌操作错误
passwd:密码未更改
原来passwd要求管理员手工输入密码!那怎么办呢?不用担心,使用--stdin
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user
echo $passwd | passwd --stdin $user
done < user.txt
结果:passwd:无法识别的选项“--stdin”
原来ubuntu不支持这个。
继续改:
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user
echo $user":"$passwd | chpasswd
done < user.txt
结果:
useradd:用户“user1”已存在
useradd:用户“user2”已存在
useradd:用户“user3”已存在
useradd:用户“user4”已存在
useradd:用户“user5”已存在
useradd:用户“user6”已存在
useradd:用户“user7”已存在
useradd:用户“user8”已存在
useradd:用户“user9”已存在
虽然有这个问题,但是密码还是设置好了。但是这个是不合里的,达到的效果应该是,如果用户存在,那么就不再重新设置密码,否则,不管存在不存在都修改,那原用户的密码就被重置了。
写一个批量删除脚本
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
userdel -r $user 2>/dev/null
done <user.txt
好了,重新改:
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user 2>/dev/null && echo $user":"$passwd | chpasswd
done < user.txt
如果用户已存在,但是我们添加的时候得不到任何信息,改正使之人性化
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user 2>/dev/null
if [ $? -eq 0 ];then
echo $user":"$passwd | chpasswd
else
echo "$user exists,skip set passwd"
fi
done < user.txt
c、结束
#最终脚本
#!/bin/bash
while read line
do
user=`echo $line | cut -d‘ ‘ -f1`
passwd=`echo $line | cut -d‘ ‘ -f2`
#echo $user":"$passwd
useradd $user 2>/dev/null
if [ $? -eq 0 ];then
echo $user":"$passwd | chpasswd
else
echo "$user exists,skip set passwd"
fi
done < user.txt
时间: 2024-12-20 14:25:39