Linux bashshell自动创建user-adduser

Linux bashshell自动创建user-adduser,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我需要通过读取包含用户名、主目录和全名的文件行来自动创建用户 我不熟悉bashshell脚本,它让我很困惑 我的adduser命令有问题。它给出错误-adduser:只允许一个或两个名称 全文如下: while read line; do fieldnumbers=$(echo $line | grep - o " " | wc - l) username=$(echo $line | cut -d' ' -f 1) home=$(echo $line |

我需要通过读取包含用户名、主目录和全名的文件行来自动创建用户

我不熟悉bashshell脚本,它让我很困惑

我的adduser命令有问题。它给出错误-adduser:只允许一个或两个名称

全文如下:

while read line;
do 
      fieldnumbers=$(echo $line | grep - o " " | wc - l)
      username=$(echo $line | cut -d' ' -f 1)
      home=$(echo $line | cut -d' ' -f 2)
      firstname=$(echo $line | cut -d' ' -f 3)

      if [[ "$fieldnumbers" -eq b4 ]]
      then
               middlename=""
      else
               middlename=$(echo $line | rev | cut -d' ' -f 2)

      lastname=$(echo $line | rev | cut -d' ' -f 1)
      password=$(echo pwgen 7 1) #create random password
      fullname="$firstname $middlename $lastname"

      echo "username is : $username"
      sudo adduser --gecos $fullname --disabled-password --home $home $username

      echo 'username:$password' | chpasswd
       echo "Password is for $username is: $password"
done < users.txt
读行时
;
做
字段号=$(echo$行| grep-o”“| wc-l)
用户名=$(echo$行| cut-d'-f 1)
主页=$(回音$行|剪切-d'-f 2)
firstname=$(echo$行| cut-d'-f3)
如果[“$fieldnumbers”-等式b4]]
然后
middlename=“”
其他的
middlename=$(回音$行|版次|切割-d'-f 2)
lastname=$(echo$行| rev | cut-d'-f 1)
密码=$(echo pwgen 7 1)#创建随机密码
fullname=“$firstname$middlename$lastname”
echo“用户名为:$username”
sudo adduser--gecos$fullname--disabled password--home$home$username
echo“用户名:$password”| chpasswd
echo“密码是$username的:$Password”
done

我确信这个脚本充满了语法错误。请帮忙。我的大脑被炸了。

除非你有意将值拆分成单独的单词,否则请始终引用你的变量

sudo adduser --gecos "$fullname" --disabled-password --home "$home" "$username"
此外,如果希望展开变量,则必须在包含变量的字符串周围使用双引号,而不是单引号

所以这一行:

echo 'username:$password' | chpasswd
应该是:

echo "username:$password" | chpasswd

用于检查您缺少一个
fi
开头的语法。与使用外部程序(如
grep
cut
)相比,有更好的方法拆分这些字段。b4是怎么回事?应该是4。那是个错误。对于fi校正,参见(U&L.SE),(SO),(AskU)等,还有一个问题。显示生成密码的echo命令有什么问题?您是指最后一个echo命令吗?我觉得很好。shellcheck.net对此有何评论?顺便问一句,在阅读用户名主页全名时,你为什么要做所有的回音和剪切,而不仅仅是