欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚本实战2

程序员文章站 2022-07-12 12:31:41
...

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 空用户报错

shell脚本实战2

必须作为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

 

相关标签: shell linux