0

我有一个随机生成密码的脚本,我已经修改它以使用zenity. 当我使用原始脚本时,我可以生成用户选择的任意长度的随机密码(我测试了 50,000)。这是代码:

    #!/bin/bash
    number=10
    echo "hello"
    echo "Please enter your number: $number"
    read newnumber
    # read newnumber
    [ -n "$newnumber" ] && number=$newnumber

    MATRIX="0123456789<?/_+-!@#$%^&*>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    #  Password will consist of standard characters.
    LENGTH=$newnumber
    #This variable can be changed for password lenth (need to try get zenity to let user choose that number)


    while [ "${n:=1}" -le "$LENGTH" ]
    # := is "default substitution" operator.
    # So, if 'n' has not been initialized, set it to 1.
   do
   PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
    # Very clever, but tricky.

    # Starting from the innermost nesting...
    # ${#MATRIX} returns length of array MATRIX.

    # $RANDOM%${#MATRIX} returns random number between 1
    # and [length of MATRIX] - 1.

    # ${MATRIX:$(($RANDOM%${#MATRIX})):1}
    # returns expansion of MATRIX at random position, by length 1. 
    # See {var:pos:len} parameter substitution in Chapter 9.
    # and the associated examples.

    # PASS=... simply pastes this result onto previous PASS (concatenation).

    # to let zenity show the password being built one character at a time, uncomment the following line
            # zenity --info --text="$PASS"
    let n+=1
    # Increment 'n' for next pass.
    done

    echo "$PASS"

(我从 [另一个问题] [1]

[1]:在 bash 脚本中使用一个变量作为另一个变量?)

我现在的问题是,当尝试生成更长的密码时,它们不会显示在zenity --info对话框中,任何超过 30 的密码都会被命中或错过。我已经通过反复运行脚本并每次选择 60 来显示一个 60 字符,但它还不够好,以至于不能被击中或错过,10 次中有 9 次会产生少于 20 个字符并且越长越挣扎它必须生成。但只在zenity

任何帮助当然都非常感谢。

4

1 回答 1

0

我找到了答案,而且非常简单......</@#&*当与 zenity 一起使用时,这些字符会导致生成器崩溃,但有人知道为什么吗?

于 2014-08-26T21:52:07.730 回答