Menu
Coddy logo textTech

Пользовательский ввод в скриптах

Часть раздела Основы путешествия по 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 принимает текст приглашения к вводу в качестве аргумента, за которым следует имя переменной для сохранения ввода.

Пользовательский ввод делает скрипты интерактивными и гибкими. Вместо того чтобы жестко кодировать значения, вы можете написать один скрипт, который каждый раз работает по-разному в зависимости от того, что вводит пользователь при запуске.

challenge icon

Задание

Легко

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

Ваш скрипт должен:

  1. Начинаться со строки shebang (#!/bin/bash)
  2. Использовать read с флагом -p для вывода запроса: What is your favorite color?
  3. Сохранять введенное значение в переменную с именем color
  4. Использовать 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!" для отображения результата.

Попробуйте сами

Терминал
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы