评估不工作

评估不工作

我尝试运行此代码来获取随机数,但 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

输出:

  1. 如果不存在号码
estou a ecoar para o 文件
1
菲姆
  1. 如果存在号码
我存在
3
3
菲姆

他们给了我同样的号码。如果有人可以帮助我,我很感激

对不起我的英语

答案1

eval意志将不执行任何操作,因为$randompasswd它是空的。

你设置randompasswd

randompasswd=$(cat /dev/urandom | tr -dc '1-9' | fold -w 1 | head -n 1 > $oncepass)

其中的命令$(...)不会产生任何输出(因为输出被重定向到文件),因此$randompasswd将是一个空字符串。

这很好,因为我想您实际上不想运行eval随机字符串?

除此之外,还有许多未加引号的变量扩展应该用双引号引起来,例如$onlytailif- 语句中(如果它包含空格,则会出现语法错误)。

我不能说太多,因为我不知道你想用这段代码做什么。

要创建由 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

相关内容