Bash:根据文本文件创建用户

时间:2010-11-05 04:07:47

标签: bash scripting

所以,我有一个像<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"

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

#!/bin/bash
while IFS=: read username fullname usergroups
do
    useradd -G $usergroups -c "$fullname" $username
done < users.txt

fullname是唯一应该包含空格的字符串(因此是引号),usergroups的列表应该用逗号分隔,而没有插入的空格(所以没有引号参数)并且您的username也不应包含空格。

Upate:

要首先创建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.txtgroups.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