【发布时间】:2014-05-23 19:26:27
【问题描述】:
我正在尝试在 osx 10.8.5 上的 bash 脚本中构建一个随机字符生成器。目标是为脚本生成随机字符串,为 wordpress wp-config.php 文件生成盐。 sn-p 如下所示:
#!/bin/bash -e
read -p "Number of digits: " digits
function rand_char {
take=$(($RANDOM % 88)); i=0; echo {a..z} {A..Z} {0..9} \, \; \. \: \- \_ \# \* \+ \~ \! \§ \$ \% \& \( \) \= \? \{ \[ \] \} \| \> \< | while read -d\ char;
do
[ "$i" = "$take" ] && echo "$char\c";
((i++));
done
}
function rand_string {
c=$1;
while [ $c -gt 0 ];
do char="${char}"$(rand_char);
let c=$c-1;
done
echo $char
}
outputsalt=`rand_string $digits`
echo $outputsalt
如果我输入 64 作为位数,则每次尝试生成的字符数都不同:
HeF6D>z}x[v=s(qRoPmNkLiIfG7E5C3A1yZwWtU§S~Q*O_M:J,b86|4]2{0)X&p (63 chars)
WtUrSpQnOkLiJ,H8F6D4B1yZ)X&V$T!R+P_M:e;c9a7>5}2{u=s(q%o§m~j#hIfG (64 chars)
_g:d,b86|4]w{u=r&p$n!lMjKhIeFcDaB>z0xYt)r&p§m~kLiJgHeFcDA1yZwX (62 chars)
}w{u=s(q%oPmNkKhIfGdEbC3A1xYvWtUrS~Q*O_L.J,H8F6|4]2?Z)X&V$n!l+j_ (64 chars)
l+j_g:e;cDaB>z}x{u=sTqRoPmNkKhIfG7E5C3A1xYvW%U§S~Q*O_L.J,b86|4] (63 chars)
有没有办法让字符数保持在给定的数字上?最好的问候拉尔夫
【问题讨论】:
-
这不是问题的原因,但您应该将
$(rand_char)放在引号内,以防止通配符扩展。 -
也许是个愚蠢的问题......但是你到底为什么不使用数组???