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

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

Образец:

var= 10 or 100 or 1000 

  • (ubuntu 16.04) .rules file /etc/udev/rules.d/, похоже, не выполняет работу
  • Удалить строку с пробелами и цитатами из xml-файла
  • Использование && и || операторы для обработки результата одной и той же команды
  • Выполнение почтовой команды внутри функции вызывает «вилку»,
  • Как подождать, пока все порожденные и фоновые процессы закончатся в сценарии bash
  • Как я могу получить статистику о процессорах, похожих на процессор, из командной оболочки?
  • Как я могу использовать несколько операторов if внутри другого if инструкции awk-программы?
  • Чтение значений массива в качестве пользовательского ввода дает неправильную длину массива и только -a или -p работает при чтении
  • 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 - лучшая ОС в мире.