我正在尝试生成由 bash 脚本中的文本文件创建的用户的随机密码,然后将这些密码保存到文本文件中。这就是我正在做的事情。
它工作正常,从文本文件创建用户并将密码也输出到 lol 文件,但创建的用户的密码不起作用。
这是我的代码,任何有关此的帮助将不胜感激。
while read line || [ -n "$line" ] # protect against no newline for last line
do name=$line
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 >> lol)
sudo useradd $name -m
sudo usermod -p $(echo $pass | openssl passwd -1 -stdin) $name
echo "The user - $name - has been created!"
done < "$fname" # double-quote fname echo
答案1
命令替换的返回值是子shell的stdout。
在下面的行中,您已将输出重定向到lol
子 shell 中的文件。因此,您没有返回值可以存储在变量中pass
:
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 >> lol)
您可以将以下行分成两部分,如下所示:
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1)
echo "$pass" >> lol
或者使用tee -a
:
pass=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 8| head -n 1 | tee -a lol)