在bash中使用/ dev / random分配一个带有10个字符长的随机字符串的变量?

时间:2014-01-31 03:49:14

标签: bash variables random cat

尝试创建一个10个字符的密码并将其分配给变量并将其回送给stdout。

这是我到目前为止创建的脚本,但它不起作用。我知道还有其他方法可以做到这一点,但是当我涉及超过1步时,使用|(管道)将信息从1个动作发送到另一个动作时,我从来都不是很好。

#!/bin/bash
tmp_pass=0
if [ $tmp_pass=0 ]; then
        tmp_pass=`cat /dev/random`
        tmp_pass=$(head tmp_pass -c 10 | base64)
        echo $tmp_pass
fi

理想情况下,我想要的是这样的例子:

  1. 定义变量(例如 - tmp_pass
  2. 将变量设置为0
  3. 如果变量为eq 0,则为其指定新作业
  4. 为变量分配以下结果:
    1. 生成随机字符串
    2. 抓取随机字符串的前20个字节
    3. 将其编码为base64
    4. 将其剪切为base64的前10个字符

  5. 注意:上面我的原始脚本中没有显示,但它确实使用echo filename(1:10)或类似内容来查看它以限制它回显行的前10个字符1。


    我知道这可以在一行中完成,但我不确定如何写出来,任何例子都会非常感激。

2 个答案:

答案 0 :(得分:4)

这里的问题是你试图用cat /dev/random读取输入流,它本身永远不会终止(例如,尝试cat /dev/stdin同样如此)。您可以通过执行类似

的操作来修复它
#!/bin/bash
tmp_pass=0
if [ $tmp_pass = 0 ]; then
        tmp_pass=`head -c 10 /dev/random | base64`
        echo "${tmp_pass:0:10}" #cut to 10 characters after base64 conversion
fi

答案 1 :(得分:0)

在密码中添加您想要的任何特殊字符,并远离/ dev / random,它将耗尽数据并且看起来像是悬挂。

tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c10