Переменная, случайным образом выбранная из трех чисел (10, 100 и 1000)

Возможно ли иметь переменную, которая выбирает случайное число из трех заранее определенных чисел?

Образец:

var= 10 or 100 or 1000 

  • Как извлечь второй и третий столбцы из файла CSV с помощью awk?
  • Экстра% в выходе скрипта awk
  • Много элит, есть ли лучший способ?
  • Создание дерева процессов
  • Выполнение всех сценариев оболочки в каталоге, начинающемся с буквы 'a'
  • Рекурсивно сравнивать содержимое каталога по имени, игнорируя расширения файлов
  • Что означает эхо "{@@ ##}"?
  • Передавать две (трубчатые) команды оболочки в качестве параметра функции оболочки
  • 5 Solutions collect form web for “Переменная, случайным образом выбранная из трех чисел (10, 100 и 1000)”

    Используйте массив для хранения значений и выберите их с помощью встроенной переменной $RANDOM . Например,

     x[0]=10 # One decade x[1]=100 # One century x[2]=1000 # One millennium for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo 1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10 

    Качество случайности не будет лучшим (чтение байтов из /dev/urandom для этого), но это должно быть более чем достаточно для скрипта.

    Примечание 1: Как люди наблюдали в комментариях, вместо инициализации элементов массива индивидуально можно, конечно, использовать массив litteral: x=(10 100 1000) .

    Примечание 2: вместо жесткого кодирования количество элементов в массиве элемент radom может быть извлечен с помощью ${x[$RANDOM%${#x[@]}]} .

    Если вы используете bash (или zsh или ksh93 ), вы можете просто сделать:

     echo "$((10**($RANDOM%3+1)))" 

    или

     var=$((10**($RANDOM%3+1))) 

    присвоить его var

    Вы также можете использовать утилиту GNU coreutils shuf :

     a=$(shuf -n1 -e 10 100 1000) 

    Использование RANDOM в соответствии с другими ответами почти наверняка будет быстрее.

     case $(( RANDOM % 3 )) in 0) var=10 ;; 1) var=100 ;; 2) var=1000 ;; esac 

    Вот несколько загадочный способ:

     printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0 

    Это будет присвоить случайное значение $var мере необходимости. Строка формата printf равна 1%0Nd – это приводит к тому, что 0 печатается с N ведущими нулями, где N будет случайным целым в интервале [1,3] .

    Linux и Unix - лучшая ОС в мире.