Пользовательский ввод в скриптах
Часть раздела Основы путешествия по Terminal на Coddy — урок 69 из 82.
Переменные полезны, но иногда нужно, чтобы ваш скрипт запрашивал информацию у пользователя во время работы. Команда read приостанавливает выполнение скрипта и ждёт, пока пользователь что-нибудь введёт, а затем сохраняет этот ввод в переменную.
Вот как это работает:
#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"При запуске этого скрипта он выводит вопрос, ждёт, пока пользователь введёт своё имя и нажмёт Enter, а затем приветствует его. Команда read принимает всё, что вводит пользователь, и сохраняет это в переменной name.
Вы можете сделать приглашение более аккуратным, используя флаг -p, который объединяет текст приглашения и ввод на одной строке:
#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"Это выводит Enter your name: и ждёт ввода на той же строке, что выглядит более аккуратно. Флаг -p принимает текст приглашения к вводу в качестве аргумента, за которым следует имя переменной для сохранения ввода.
Пользовательский ввод делает скрипты интерактивными и гибкими. Вместо того чтобы жестко кодировать значения, вы можете написать один скрипт, который каждый раз работает по-разному в зависимости от того, что вводит пользователь при запуске.
Задание
ЛегкоСоздайте скрипт командной строки с именем greeter.sh, который запрашивает у пользователя его любимый цвет и затем выводит сообщение с использованием введенных данных.
Ваш скрипт должен:
- Начинаться со строки shebang (
#!/bin/bash) - Использовать
readс флагом-pдля вывода запроса:What is your favorite color? - Сохранять введенное значение в переменную с именем
color - Использовать
echoдля вывода:Nice! [color] is a great color!(где [color] — это введенное пользователем значение)
Сделайте скрипт исполняемым, затем запустите его, передав blue в качестве входных данных. Этот терминал не является интерактивным — он не может остановиться и ждать вашего ввода, — поэтому передайте ответ в скрипт с помощью конвейера (pipe):
echo "blue" | ./greeter.shВаш вывод должен быть следующим:
Nice! blue is a great color!Примечание: приглашение к вводу
What is your favorite color?здесь не отображается.read -pвыводит приглашение только в том случае, если ввод поступает с клавиатуры, а здесь он поступает из конвейера.
Подсказка: создайте скрипт построчно с помощью
echoс перенаправлением. Используйтеread -p "What is your favorite color? " colorдля запроса и захвата ввода, а затемecho "Nice! $color is a great color!"для отображения результата.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога13Основы скриптинга оболочки
Что такое скрипт оболочкиСоздание и запуск скриптаПеременные в скриптахПользовательский ввод в скриптахОператор ifЦикл forЦикл whileИтог - Угадай число2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данных