Linux bashshell自动创建user-adduser
我需要通过读取包含用户名、主目录和全名的文件行来自动创建用户 我不熟悉bashshell脚本,它让我很困惑 我的adduser命令有问题。它给出错误-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 |
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对此有何评论?顺便问一句,在阅读用户名主页全名时,你为什么要做所有的回音和剪切,而不仅仅是?