Подтвердить что ты не робот

Выбирайте и печатайте одну из трех строк в случайном порядке в Bash script

Как напечатать значение, либо 1, 2, либо 3 (случайным образом). Моя лучшая ошибка не удалась:

#!/bin/bash

1 = "2 million"
2 = "1 million"
3 = "3 million"

print randomint(1,2,3)
4b9b3361

Ответ 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
~.$