我尝试运行此代码来获取随机数,但 eval 似乎不起作用这是我的代码
#!/bin/bash # Sequencia alfanumerica de 12 carateres aleatoriamente (maiusculas e minusculas) 文件=“/home/ruimachado/password.txt” Oncepass =“/home/ruimachado/once_pass.txt” randompasswd=$(cat /dev/urandom | tr -dc '1-9' | 折叠 -w 1 | head -n 1 > $oncepass) onlytail=$(尾部-1 $oncepass) 通过=$(尾部-1$文件) testename=$(grep -R $onlytail $file) if [ $onlytail != "$testename" ] 然后 echo "estou a ecoar para o 文件" 回声 $onlytail >> "$file" 别的 回声“我存在” 回显“$onlytail” 菲 评估$randompasswd 回显“$onlytail” 回声“菲姆” 出口0
输出:
- 如果不存在号码
estou a ecoar para o 文件 1 菲姆
- 如果存在号码
我存在 3 3 菲姆
他们给了我同样的号码。如果有人可以帮助我,我很感激
对不起我的英语
答案1
该eval
意志将不执行任何操作,因为$randompasswd
它是空的。
你设置randompasswd
与
randompasswd=$(cat /dev/urandom | tr -dc '1-9' | fold -w 1 | head -n 1 > $oncepass)
其中的命令$(...)
不会产生任何输出(因为输出被重定向到文件),因此$randompasswd
将是一个空字符串。
这很好,因为我想您实际上不想运行eval
随机字符串?
除此之外,还有许多未加引号的变量扩展应该用双引号引起来,例如$onlytail
在if
- 语句中(如果它包含空格,则会出现语法错误)。
我不能说太多,因为我不知道你想用这段代码做什么。
要创建由 12 个字母数字字符组成的密码流:
tr -dc '[:alnum:]' </dev/urandom | fold -w 12
选择其中第一个:
tr -dc '[:alnum:]' </dev/urandom | fold -w 12 | head -n 1
如果您想生成 100 个唯一的密码(并确保这些密码是唯一的):
while true; do
tr -dc '[:alnum:]' </dev/urandom | fold -w 12 | head -n 100 | sort -u -o password.list
if [ "$( wc -l <password.list )" -eq 100 ]; then
break
fi
done
这首先生成 100 个密码并对它们进行排序(删除重复项)。然后它测试生成的文件是否有 100 行。如果不是,它会再次执行整个操作,否则退出循环。如果该文件password.list
存在,则会被覆盖。
如果您有一个现有password.list
文件并且想要生成(并添加)该文件中尚未存在的密码:
while true; do
newpassword=$( tr -dc '[:alnum:]' </dev/urandom | fold -w 12 | head -n 1 )
if ! grep -q -F "$newpassword" password.list; then
printf 'New password generated: %s\n' "$newpassword"
printf '%s\n' "$newpassword" >>password.list
break
fi
done