我想在这种模式下生成许多六个字符串:
[辅音] [元音] [辅音] [辅音] [元音] [辅音]
e.g。
haplop
github上
qursog
我已经看过各种各样的方法,但到目前为止,我所拥有的只是优雅。我的想法主要是围绕一次生成一个角色,但即便如此,由于我缺乏bash脚本知识和模糊的Linux命令,我的想法并不是那么好。
理想情况下,我正在寻找一个随机生成字符串的Linux命令,但允许我指定上面显示的模式(如果一个甚至存在)。或者,如果您知道在bash中执行此操作的简单方法,那也很棒。
提前致谢
编辑:顺便说一下,我会在选择接受的答案前24小时给出这个答案,这样我就有更多的机会选择最好的答案,而不仅仅是第一个(尽管第一个答案非常好)。
答案 0 :(得分:14)
以下是生成元音的方法:
s=aeiou
p=$(( $RANDOM % 5))
c=${s:$p:1}
对辅音使用相同的方法。
你可以将它包装成一个小函数:
function vowel() {
s=aeoiu
p=$(( $RANDOM % 5))
echo -n ${s:$p:1}
}
然后你有一个很好的模式来生成字符串:
s=`consonant; vowel; consonant; vowel; consonant; vowel`
答案 1 :(得分:2)
#!/bin/bash
#
#
cprint () {
typ=$1
case $typ in
v) alpha="aeiouy" ;;
c) alpha="bcdfghjklmnpqrstvwxz" ;;
V) alpha="AEIOUY" ;;
C) alpha="BCDFGHJKLMNPQRSTVWXZ" ;;
n) alpha="0123456789" ;;
*) echo "** Undefined **" ; exit 1 ;;
esac
len=${#alpha}
r=$((RANDOM%len))
echo -en ${alpha:r:1}
}
rprint () {
code=$1
for i in $(seq 1 ${#code})
do
c=${code:i-1:1}
cprint $c
done
echo
}
rprint "cvccvc"
rprint "cvcvvc"
rprint "Cvccvc"
rprint "Vccvcvc"
rprint "Cvnvn"
此解决方案很容易更改为打印不同的序列,很容易重新定义,如果您不同意y,需要äöü或UPPERCASE等。
实验结果:
gohhec
voteup
Wuwjut
Utpycoq
Va6a6
男人bash说RANDOM:
每次引用此参数时,都是0到32767之间的随机整数...
因此,如果取模RANDOM % X
,而X不是2的幂,则较低的余数将比较高的余数更好。在您的情况下,它不应该很重要,只要您不使用角色组转到extereme,或在高安全性区域使用它。 :)
答案 2 :(得分:1)
对于后代,我将包括我最终的代码。它主要使用Karoly Horvath的代码,但我还添加了一些来自“用户未知”的想法:
#!/bin/bash
function v() {
s=aeoiuy
p=$((RANDOM % ${#s}))
echo -n ${s:$p:1}
}
function c() {
s=bcdfghjklmnpqrstvwxz
p=$((RANDOM % ${#s}))
echo -n ${s:$p:1}
}
function genPatternStrings() {
for i in $(eval echo {0..$1}); do
echo `c;v;c;c;v;c;`
done
}
genPatternStrings $1;
答案 3 :(得分:1)
虽然以下命令不回答原始问题,但在其他情况下生成任何随机字符串可能很有用:
for i in {1..15}; do # 15 random strings
dd status=noxfer if=/dev/random bs=1 count=200 2>/dev/null |
tr -dc 'a-z0-9A-Z' | # alphanumerics only
cut -b1-10 | # length 10
tr 'A-Z' 'a-z' # lowercase
done | less