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

Задание

Легко

Создай shell-скрипт с именем 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. Этот терминал не является интерактивным: он не может остановиться и ждать, пока ты начнёшь вводить текст, поэтому передай ответ в скрипт с помощью конвейера:

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!", чтобы отобразить результат.

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

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

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

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

Потренируйтесь самостоятельно: Песочница Terminal