所以,我有一个像<username>:<fullname>:<usergroups>
这样组织的文本文件。
我需要为每一行创建一个新用户并将它们放入他们的组中。我一直试图将username
设置为要与useradd
一起使用的变量。我尝试过使用cut
,但它需要一个文件名,我不能只是传递一行。
以下是我目前的情况:
#! /bin/bash
linesNum=1
while read line
do
echo
name=$( cut -d ":" -f1 $( line ) )
((lineNum+=1))
done < "users.txt"
感谢您的帮助!
答案 0 :(得分:3)
#!/bin/bash
while IFS=: read username fullname usergroups
do
useradd -G $usergroups -c "$fullname" $username
done < users.txt
fullname
是唯一应该包含空格的字符串(因此是引号),usergroups
的列表应该用逗号分隔,而没有插入的空格(所以没有引号参数)并且您的username
也不应包含空格。
要首先创建usergroups
列表,您可以执行此操作...
#!/bin/bash
while IFS=: read username fullname usergroups
do
echo $usergroups >> allgrouplist.txt
done < users.txt
while IFS=, read group
do
echo $group >> groups.txt
done < allgrouplist.txt
sort -u groups.txt | while read group
do
groupadd $group
done
这有点长篇大论,可以通过压缩来避免使用其他文件allgrouplist.txt
和groups.txt
,但我想让它易于理解。作为参考,这是一个更紧凑的版本。
sort -u < $(
echo $(while IFS=: read a b groups; do echo $groups; done < users.txt )
| while IFS=, read group; do echo $group; done )
| while read group
do
groupadd $group
done
(我先把小型版搞砸了一下,现在应该没问题,但请注意我没有测试过这个!)
答案 1 :(得分:1)
IFS=: while read username fullname usergroups
do
useradd -G "$usergroups" -c "$fullname" "$username"
done < users.txt