如何打印值1,2或3(随机)。我最好的猜测失败了:
#!/bin/bash
1 = "2 million"
2 = "1 million"
3 = "3 million"
print randomint(1,2,3)
答案 0 :(得分:27)
要使用bash生成随机数,请使用$RANDOM
内部Bash函数:
arr[0]="2 million"
arr[1]="1 million"
arr[2]="3 million"
rand=$[ $RANDOM % 3 ]
echo ${arr[$rand]}
来自RANDOM的bash手册:
每次参数都是 引用,0之间的随机整数 并生成32767。序列 可以初始化随机数 通过为RANDOM赋值。如果 RANDOM没有设置,它失去了它 特殊属性,即使它是 随后重置。
答案 1 :(得分:5)
64个字符数字字符串
randomString32() {
index=0
str=""
for i in {a..z}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {A..Z}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {0..9}; do arr[index]=$i; index=`expr ${index} + 1`; done
for i in {1..64}; do str="$str${arr[$RANDOM%$index]}"; done
echo $str
}
答案 2 :(得分:3)
shuf from Coreutils效果很好:
printf 'a\nb\nc\n' | shuf -n1
POSIX eval数组仿真+ RANDOM
修改Marty的eval
技术来模拟数组(非POSIX):
a1=a
a2=b
a3=c
eval echo \$$(expr $RANDOM % 3 + 1)
这仍然留下RANDOM
非POSIX。
awk
' rand()
是一种POSIX解决方法。
答案 3 :(得分:1)
~.$ set -- "First Expression" Second "and Last"
~.$ eval echo \$$(expr $RANDOM % 3 + 1)
and Last
~.$
答案 4 :(得分:0)
想使用不错的shuf
方法在coreutils中使用-n1 -e
进行确认。
示例用法,从值a
,b
,c
中随机选择:
CHOICE=$(shuf -n1 -e a b c)
echo "choice: $CHOICE"
我查看了两个样本大小(1000和10000)的余额:
$ for lol in $(seq 1000); do shuf -n1 -e a b c; done > shufdata
$ less shufdata | sort | uniq -c
350 a
316 b
334 c
$ for lol in $(seq 10000); do shuf -n1 -e a b c; done > shufdata
$ less shufdata | sort | uniq -c
3315 a
3377 b
3308 c
参考:https://www.gnu.org/software/coreutils/manual/html_node/shuf-invocation.html