Вопрос или проблема
Как написать в Linux на Bash в shellscript часть, которая может делать что-то вроде этого
введите число
должно быть в диапазоне от 4 до 999
если нет, спросите снова, чтобы ввести
введённое число * 5 * случайное число [1-9] (один знак)
отобразите результат и спросите, хорошо ли
введите – для нового запуска (введённое число * 5 * случайное число [1-9] (один знак))
y – для да, хорошо, продолжаем в скрипте
n – вернуться к моменту “введите число” снова
e – для выхода из скрипта
я знаю, что с командой “read” есть приглашение ввести что-то,
и я знаю, что с помощью cat /dev/urandom | tr -cd '0-9' | head -c 1
это стать одной случайной цифрой
Ответ или решение
Для создания Bash-скрипта, который будет реализовывать описанные вами функции, мы последовательно разработаем структуру скрипта, обеспечим проверку ввода, генерацию случайного числа и взаимодействие с пользователем.
Пример Bash-скрипта
Ниже приведён полный пример скрипта, который соответствует всем требованиям в вашем вопросе:
#!/bin/bash
while true; do
# Запрос номера у пользователя
read -p "Введите число в диапазоне от 4 до 999: " entered_number
# Проверка, является ли введенное число числом и находится ли оно в заданном диапазоне
if [[ $entered_number =~ ^[0-9]+$ ]] && [ "$entered_number" -ge 4 ] && [ "$entered_number" -le 999 ]; then
# Генерация случайного однозначного числа от 1 до 9
random_number=$((RANDOM % 9 + 1))
# Вычисление результата
result=$((entered_number * 5 * random_number))
# Отображение результата
echo "Результат: $result. Устраивает? [y - да, n - нет, - для нового запуска, e - выход]"
while true; do
read -p "Введите ваш выбор: " choice
case $choice in
y|Y)
echo "Вы выбрали продолжить. Скрипт завершен."
exit 0
;;
n|N)
echo "Вы выбрали продолжить с новым числом."
break # Возврат к началу цикла для нового ввода
;;
-)
echo "Запуск нового расчета."
break # Возврат к началу цикла для нового ввода
;;
e|E)
echo "Выход из скрипта."
exit 0
;;
*)
echo "Неверный выбор! Пожалуйста, выберите 'y', 'n', '-' или 'e'."
;;
esac
done
else
echo "Некорректный ввод. Пожалуйста, введите число в диапазоне от 4 до 999."
fi
done
Объяснение работы скрипта
-
Запрос числа: С помощью команды
read
мы запрашиваем у пользователя ввод числа в заданном диапазоне. -
Проверка ввода: Если введенное значение не соответствует требованиям (не число или не попадает в диапазон от 4 до 999), скрипт уведомляет пользователя и запрашивает ввод повторно.
-
Генерация случайного числа: Используя механизм
$((RANDOM % 9 + 1))
, создается случайное однозначное число от 1 до 9. -
Вывод результата: Скрипт вычисляет результат по формуле и выводит его пользователю, предлагая выбрать, устраивает ли его результат.
-
Обработка выбора пользователя: В данном блоке происходит проверка ввода. В зависимости от выбора пользователя:
- Если введено ‘y’ или ‘Y’, скрипт завершает работу.
- Если введено ‘n’ или ‘N’, происходит возврат к первоначальному запросу.
- Если введен символ ‘-‘, снова предлагается ввести число для нового расчета.
- Если введено ‘e’ или ‘E’, скрипт завершается.
- При любом другом вводе пользователю сообщается о неверном выборе.
Этот подход гарантирует, что ваш скрипт будет чистым, понятным и легким в использовании. Каждая функция реализована логично, что позволяет пользователю легко работать с программой, а также предоставляет возможность расширения и модификации в будущем.