ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Сгенерировать случайное число в bash

Bash Heredoc

Число, которое изменяется при каждом выполнении скрипта, называется случайным числом, и оно непредсказуемо. Случайные числа используются в программировании для различных целей, таких как тестирование данных, генерация лотерейных билетов, генерация пароля и т. д. Целое число или плавающее число можно использовать для генерации случайного числа в bash. Случайное число определенного диапазона или размера можно сгенерировать с помощью сценария bash. В этой статье были показаны различные способы генерации случайных чисел в bash.

 

Использование случайного генератора:

Случайное число или диапазон случайных чисел можно сгенерировать с помощью переменной $RANDOM. По умолчанию он генерирует случайное число от 0 до 32767. Но вы можете установить диапазон чисел для генерации случайных чисел, разделив значение $RANDOM на определенное значение. Различные варианты использования переменной $RANDOM для генерации случайных чисел показаны в следующей части статьи.

 

Генерация случайных чисел с использованием переменной $RANDOM:

Здесь показаны способы генерации случайного числа в терминале и выполнения файла сценария.

 

A. Генерация случайных чисел с терминала

Выполните следующую команду, чтобы сгенерировать случайное число в диапазоне от 0 до 32767.

$ echo $RANDOM

 

Вы можете сгенерировать случайное число из определенного диапазона, разделив переменную $RANDOM на определенное значение и получив оставшееся значение. Выполните следующую команду, чтобы сгенерировать случайное число в диапазоне от 1 до 50. Здесь используются двойные первые скобки с символом $.

$ echo $(( $RANDOM % 50 + 1 ))

 

Выполните следующую команду, чтобы сгенерировать случайное число в диапазоне от 10 до 40. Здесь использовалась третья скобка с символом $.

$ echo $[ $RANDOM % 40 + 10 ]

Б. Генерация случайных чисел с помощью скрипта

Создайте файл bash с помощью следующего сценария, чтобы сгенерировать случайное число из определенного диапазона, где минимальное и максимальное значения диапазона будут взяты от пользователя. Сообщение об ошибке будет отображаться, если взятое максимальное значение меньше минимального значения. Если разница между максимальным и минимальным значением равна 1, отобразится другое сообщение об ошибке. Случайное число будет генерироваться при каждом выполнении этого скрипта, если в качестве входных данных будут приняты допустимые минимальное и максимальное значения.

#!/bin/bash
# Сгенерировать случайный диапазон, определенный пользователем

# Взять верхнее и нижнее значение из пользовательского

echo Введите минимальное значение:"
read minimum
echo "Введите максимальное значение:"
read maximum

# Проверить взятые значения действительны

if [[ $maximum < $minimum ]]; then
echo "Максимальное значение не может быть ниже минимального"
exit 1
fi

# Найти разницу между числами
diff=$(($maximum-$minimum))

# Проверьте разницу  значение
if [[ $diff == 1 ]]; then
echo "Диапазон чисел должен быть больше 1"
exit 1
fi

# Сгенерировать случайное число

randomNumber=$(($minimum + $RANDOM % $maximum))

#Распечатать сгенерированное число

echo "Сгенерированное случайное число: $randomNumber"

 

Следующий вывод появится, если сценарий выполняется несколько раз. Здесь приведенный выше сценарий был выполнен трижды. Сообщение об ошибке было напечатано для первых двух выполнений из-за недопустимого ввода, а для последнего выполнения было сгенерировано случайное число.

 

Генерация случайных чисел с помощью команды shuf:

Использование команды `shuf` – еще один способ сгенерировать случайное число из определенного диапазона. В этой статьи были показаны способы генерации случайного числа из терминала и использования сценария.

A. Генерация случайных чисел с терминала

Выполните следующую команду, чтобы сгенерировать случайное число от 0 до 50 с помощью команды `shuf`.

$ shuf -i 0-50 -n1

 

Согласно следующему выводу, указанная выше команда была выполнена три раза, и были сгенерированы три случайных числа.

Б. Генерация случайных чисел с помощью скрипта

Создайте файл bash со следующим сценарием для создания списка случайных чисел на основе входного значения. Цикл for использовался для многократного выполнения команды`shuf`, чтобы сгенерировать список случайных чисел от 1 до 100 и распечатать числа.

##!/bin/bash
# Генерируется случайное с помощью `shuf` команды
echo "How many random numbers do you want to generate?:"
read number

#Print сгенерированные случайные числа
echo "The generated random numbers are:"
for n in `seq "$number"`
do
randomNumber=$(shuf -i 1-100 -n1)
echo $randomNumber
done

 

Следующие выходные данные показывают, что 5 было принято в качестве входного значения и было сгенерировано 5 случайных чисел, которые не больше 100 и не меньше 1.

 

Генерация случайных чисел с помощью /dev/urandom:

/dev/urandom можно использовать с разными командами для генерации разных типов случайных значений. Его нельзя использовать для указания значений диапазона, таких как команда shuf и переменная $RANDOM. Но количество цифр случайного числа можно определить в команде с помощью /dev/urandom. Использование команды od с /dev/urandom показано в следующей части этого руководства. Эта команда может использоваться для указания количества байтов, где каждый байт может быть определен десятичным числом от 0 до 255.

Выполните следующую команду, чтобы сгенерировать случайное число от 0 до 255.

$ od -A n -t d -N 1 /dev/urandom

 

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

 

Заключение:

В этой статье на различных примерах были объяснены три различных способа генерации случайных чисел. Кодер может генерировать определенный диапазон случайных чисел с помощью переменной $RANDOM или команды shuf в bash. Кодировщик может использовать /dev/urandom с любой другой командой для генерации случайного числа байтов определенной длины или длины. Генерация случайных чисел – очень распространенное требование для программирования, и я надеюсь, что читатели смогут сгенерировать случайное число в соответствии со своими требованиями после прочтения этого руководства.

Exit mobile version