随机密码变量消失

时间:2010-05-06 14:53:48

标签: linux bash shell

我正在使用以下命令在shell脚本中生成随机密码:

DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)

当我在一个文件中运行它时,就像这样:

#!/bin/sh
DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)
echo $DBPASS

密码被回应。当我将它合并到一个更大的脚本中虽然变量似乎永远不会因某种原因而被创建,

所以例如这不起作用(oldpass字符串被替换为空):

DBPASS=</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)
sed -i s/oldpass/$DBPASS/ mysql_connect.php

如果我手动设置变量虽然一切都很好。我必须承认我不完全确定如何生成密码。如果有助于澄清问题可能是什么,则此脚本包含在后面的www.act cPanel脚本

任何人都可以看到问题所在吗?

1 个答案:

答案 0 :(得分:1)

$1求值为null(未设置)时,第二个head运行,它就是输出字符串的内容。 echo不是$DBPASS,因为DBPASS=$(</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 8)) 为空。您需要使用命令替换来将输出输入变量:

head

此外,由于第一个/dev/null被重定向到$1,如果DBPASS=$(</dev/urandom tr -dc '[:alnum:]' | head -c ${1:-8} 2>&1) 不为空,则不会输出任何内容。你为这个条款做了什么呢?

如果你想要的是提供默认长度(如果没有提供参数),那么试试这个:

'[:alnum:]'

我免费投入{{1}}。