Выбирайте и печатайте одну из трех строк в случайном порядке в Bash script
Как напечатать значение, либо 1, 2, либо 3 (случайным образом). Моя лучшая ошибка не удалась:
#!/bin/bash
1 = "2 million"
2 = "1 million"
3 = "3 million"
print randomint(1,2,3)
Ответы
Ответ 1
Чтобы генерировать случайные числа с помощью bash, используйте $RANDOM
внутреннюю функцию bash:
arr[0]="2 million"
arr[1]="1 million"
arr[2]="3 million"
rand=$[ $RANDOM % 3 ]
echo ${arr[$rand]}
Из руководства bash для RANDOM:
Каждый раз, когда этот параметр ссылка, случайное целое число от 0 и 32767. Последовательность случайных чисел могут быть инициализированы путем присвоения значения RANDOM. Если RANDOM не работает, он теряет специальные свойства, даже если это впоследствии reset.
Ответ 2
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
}
Ответ 3
shuf от 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, чтобы обойти это.
Ответ 4
~.$ set -- "First Expression" Second "and Last"
~.$ eval echo \$$(expr $RANDOM % 3 + 1)
and Last
~.$