shell脚本实战2
shell脚本的目标是让系统管理员过的更轻松。如果你碰巧工作在一个拥有大量用户的环境中,最烦人的工作之一就是创建新用户账号。好在可以使用while循环来降低工作的难度。
你不用为每个需要创建的新用户账户手动输入useradd命令,而是可以将需要添加的新用户账户放入一个文件文件中,然后创建一个简单的脚本进行处理。这个文本文件的格式为userid,user name
第一个条目是你为新用户账户选用的用户ID。第二个条目是用户的全名。两个值之间使用逗号分隔,这样就形成了一种名为逗号分隔值的文件格式(或者是.csv)。这种文件格式在电子表格中机器厂件,所以你可以轻松地在电子表格程序中创建用户账户列表,,然后将其保存成.csv格式,以备shell脚本读取及处理。
要读取文件中的数据,得用上一点shell脚本编程技巧。我们将IFS分隔符设置成逗号,并将其放入while语句的条件测试部分,然后使用read命令读取文件中的各行。实现代码如下:
whlie IFS= ',' read -r userid name
read命令会自动读取.csv文本文件的下一行内容。所以不需要专门再写一个循环来处理。当read命令返回FALSE时(也就是读取完整个文件时),while命令就会推出。妙极了!
要想把数据从文件中送入while命令,只需要在while命令尾部使用一个重定向符就可以了。
将各个部分处理过程写成脚本如下。
#! /bin/bash
# process new user accounts
# useradd -c comment -m mkdir a new directory for new user
input="users.csv"
while IFS=',' read -r userid name
do
echo "adding $userid"
useradd -c "$name" -m $userid
done < "$input"
~
注释:useradd添加用户的时候 -c:是在创建新用户的时候添加了一个描述comment
-m 是创建用户的时候,若用户对应需要创建的家目录不存在,则创建一个家目录
-M 是创建用户的时候,不创建家目录
$input变量指向数据文件,并且该变量被作为while命令的重定向数据。users.csv文件内容如下。
[aaa@qq.com robin]#
[aaa@qq.com robin]# cat users.csv
rich,Ricard Blum
christine,Christine Bresnahan
barbara,Barbara Blum
tim,Timothy Bresnahan
注意:users.csv文件最后一行不能由空格,否则就有useradd 空用户报错
必须作为root用户才能运行这个脚本,因为useradd命令需要root权限。
[aaa@qq.com robin]# ./touchmultiuser.sh
adding rich
adding christine
adding barbara
adding tim
来看一眼/etc/passwd,你就会发现账户已经创建好了。
# tail /etc/passwd
[aaa@qq.com robin]# cat /etc/passwd | tail -n 5
mysql:x:997:993:MySQL server:/var/lib/mysql:/sbin/nologin
rich:x:1000:1000:Ricard Blum:/home/rich:/bin/bash
christine:x:1001:1001:Christine Bresnahan:/home/christine:/bin/bash
barbara:x:1002:1002:Barbara Blum:/home/barbara:/bin/bash
tim:x:1003:1003:Timothy Bresnahan:/home/tim:/bin/bash
上一篇: Spring Boot 构造器参数绑定,越来越强大了!
下一篇: 不知不觉,写了一个编译器(一)