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

我是bash shell脚本的新手,这让我感到非常困惑。

我的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


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

最佳答案

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

sudo adduser --gecos "$fullname" --disabled-password --home "$home" "$username"


此外,如果要扩展变量,则必须在包含变量的字符串周围使用双引号,而不是单引号。

Difference between single and double quotes in Bash

所以这行:

echo 'username:$password' | chpasswd


应该:

echo "username:$password" | chpasswd

关于linux - bash shell自动创建用户-adduser,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52160645/

10-12 17:07