我有2个文本文件,users.txt文件包含1000个用户,groups.txt文件包含50个组。我想运行一个将30个用户添加到每个组的命令(例如:组1的用户1-30,组2的用户31-60,等等)。这样做的最实用方法是什么?
这是我到目前为止所拥有的:
for i in `cat users.txt` ; do useradd $i; echo Pass$i | passwd $i -- stdin; done
for i in `cat groups.txt` ; do groupadd $i; done
答案 0 :(得分:1)
假设您的文件每行有一个用户和一组用户,这是一个伪单行代码:
sed = groups.txt | while true ; do
read line_no
read group_name
[ -z $line_no ] && break
(( from = (line_no - 1) * 30 + 1 ))
(( to = line_no * 30 ))
sed -n "${from},${to} p" users.txt | xargs -r -n 1 usermod -a -G $group_name
done
此代码调用sed(1)
打印groups.txt
中每一行的行号(以1开头)和行本身(即组名),然后将输出通过管道循环到一个无限循环中,执行以下操作:
$line_no
变量中$group_name
变量中$line_no
为空,则假定我们已经到达groups.txt
的结尾并中断退出循环users.txt
作为索引来计算$line_no
的开始和结束行号sed(1)
在这些行之间打印users.txt
中的所有行xargs(1)
中,后者针对每个单个用户名运行usermod(8)
,并将其从上方附加到$group_name
上。如果用户名/标准输入为空,'-r'
开关会告诉xargs(1)
不要运行usermod(8)
。编辑:为了便于阅读,将分号替换为换行符