我正在尝试制作一个 bash 脚本,该脚本将询问用户的姓名、最喜欢的食物和当前日期,并将这些内容保存到变量 food、date 和 name 中,然后将生成随机密码。当用户忘记密码时,他所要做的就是输入相同的名称(userrecovery)、最喜欢的食物(foodrecovery)和生成密码的日期(daterecovery),并且应该显示密码。我用来生成随机密码的代码:
choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
pass="$({ choose '!@#$%^\&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}')"
我尝试过类似的事情:
if [ $food=$foodrecovery -a $date=$daterecovery -a.... ]
echo $pass
这是可行的,但是当我关闭脚本并重新打开它时,它将生成一个不应该生成的新密码。
答案1
每次运行时pass
都会执行该脚本。您应该像您一样将其包装到函数中choose()
。例如:
genpass()
{
pass="$({ choose '!@#$%^\&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}')"
echo "${pass}"
}
另一个注意事项;
$RANDOM
应避免使用(参考)用于密码和加密密钥生成。
以下更简单且加密性更强;
choose(){ echo "$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)" }