Bash:从文本文件创建多个用户

时间:2011-11-17 04:01:12

标签: bash

我已经尝试了几个小时从文本文件创建批量用户但我无法使其工作 在文本文件中,我有以下格式

约翰史密斯:学生

#!/bin/bash
FILE=/home/knoppix/users.txt

GECOS=$(cat $FILE | cut -d: -f1)
USRGRP=$(cat $FILE | cut -d: -f2)

groupadd -f $USRGRP

echo "type username"
read USERNM
USERPW="123456"

useradd $USERNM -p $USERPW -g $USRGRP -c "$GECOS,$USRGRP" -d $HOME/$USERNM -s $USERSH -m

它没有用,当我试图调试bash脚本时,我认为它不是逐行阅读,它抓住了字段中的所有内容。

我在IFS或者在users.txt中的行中错过了一次。这样的事情,但我不是专家的帮助。我也应该使用newusers而不仅仅是useradd

1 个答案:

答案 0 :(得分:0)

  

我在阅读每一行时需要做类似的事情

> outFile
while read var1 var2 var3 var4 ; do
  echo $var1 $var2 $var3 >> outFile
  echo $var4 >> outFile
done < /home/knoppix/users.txt

这假设users.txt值由空格字符分隔,并且每行有4个字要进行某些处理。

如果你的值是用空格字符旁边的东西分隔的,例如':'char,那么你必须告诉read命令在IFS(InternalFieldSep)中使用什么,所以

savIFS=${IFS}
> outFile
while IFS=":" read var1 var2 var3 var4 ; do
  echo $var1 $var2 $var3 >> outFile
  echo $var4 >> outFile
done < /home/knoppix/users.txt

IFS=${savIFS}

此外,

形成的代码

ECOS=$(cat $FILE | cut -d: -f1)

可以缩减为

ECOS=$( cut -d: -f1 $FILE )

另请注意,对于$ FILE中的每一行,您将获得一个值,因此如果有3行文本,则ECOS将为ECOS="line1Val line2Val line3Val"

我希望这会有所帮助。