Пользовательский ввод в скриптах
Часть раздела Основы путешествия по 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 принимает текст приглашения в качестве аргумента, за которым следует имя переменной для хранения введённых данных.
Пользовательский ввод делает скрипты интерактивными и адаптируемыми. Вместо жёсткого задания значений можно написать один скрипт, который работает по-разному в зависимости от того, что пользователь вводит при каждом его запуске.
Задание
ЛегкоСоздай shell-скрипт с именем greeter.sh, который запрашивает у пользователя его любимый цвет, а затем отображает сообщение с использованием введённых данных.
Твой скрипт должен:
- Начинаться со строки shebang (
#!/bin/bash) - Использовать
readс флагом-pдля вывода приглашения:What is your favorite color? - Сохранять введённые данные в переменной с именем
color - Использовать
echoдля вывода:Nice! [color] is a great color!(где [color] — это введённые пользователем данные)
Сделай скрипт исполняемым, а затем запусти его, передав в качестве ввода blue. Этот терминал не является интерактивным: он не может остановиться и ждать, пока ты начнёшь вводить текст, поэтому передай ответ в скрипт с помощью конвейера:
echo "blue" | ./greeter.shТвой вывод должен быть таким:
Nice! blue is a great color!Примечание: приглашение
What is your favorite color?здесь не отображается.read -pвыводит приглашение только тогда, когда ввод поступает с клавиатуры, а здесь он поступает из конвейера.
Заключай каждую записываемую строку в одинарные кавычки:
echo 'echo "Hello $name"' >> script.sh. Одинарные кавычки не позволяют shell заменить$nameво время записи файла, поэтому скрипт сохраняет переменную и раскрывает её при запуске. Двойные кавычки подставили бы значение немедленно.
Подсказка: Создавай скрипт построчно, используя
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Итог - Конвейер данныхПотренируйтесь самостоятельно: Песочница Terminal