Поиск по сайту:
Сегодня я позволил солнцу встать раньше, чем я (Г. Лихтенберг).

Как мне запросить ввод в Bash?

06.03.2021
Bash Heredoc

Часто при создании сценария Bash необходимо выполнять вычисления в зависимости от вводимых пользователем данных. В этом руководстве, прежде чем выполнять базовую операцию со сценарием оболочки, сначала давайте взглянем на интерпретацию и проверку вводимых пользователем данных. Мы будем использовать встроенную команду чтения Bash для интерпретации пользовательского ввода Bash. Команда чтения принимает какое-то значение в качестве ввода через пользователя и присваивает его переменной. Он считывал только одну строку через командную строку Bash. В этой статье вы узнаете, как интерпретировать ввод пользователя из терминала и скрипта.

Вот синтаксис для реализации команды чтения:

read <variable name>

Пример 01:

Давайте рассмотрим простой пример чтения ввода от пользователя в bash при запросе. Откройте терминал и создайте новый файл «input.sh».

touch input.sh

 

Откройте файл и добавьте в него небольшой код, как показано ниже. Во-первых, оператор echo просит пользователя добавить входное значение. Оператор чтения используется для ввода пользовательского значения, которое будет сохранено в переменной «NAME». Последний оператор echo используется для печати ответа с введенным значением в виде переменной «$NAME».

#!/bin/bash

echo Привет, как тебя зовут?

read NAME

echo Привет, меня зовут $NAME

 

Запустите файл с помощью команды bash. Сначала он запросит имя. Когда пользователь введет значение, он распечатывает сообщение со значением внутри него.

 

Пример 02:

Откройте старый файл и напишите в него приведенный ниже код. Мы можем использовать встроенную команду read; пользователю с запросом, используя эту опцию -p. Вы должны вызвать, чтобы использовать ключевое слово «readline» -e, чтобы разрешить редактирование строки с помощью клавиш со стрелками. После этого используйте переменную для печати пути к файлу, введенному пользователем в командной оболочке.

read -e -p "Введите путь к файлу" FILEPATH

echo $FILEPATH

 

Читать  Как включить TCP BBR для увеличения скорости сети/интернета на сервере Linux

Давайте проверим вывод этого кода с помощью команды bash в терминале. Вы увидите, что он попросит ввести путь к файлу в оболочке. Когда вы вводите необходимое значение и нажимаете Enter, он распечатывает его.

 

Если вы хотите предложить ответ, вы должны использовать ключевое слово «–i» после строки, указав путь в кавычках.

read -e -p "Введите путь к файлу" -i "user/local/etc" FILEPATH

echo $FILEPATH

 

Давайте проверим вывод обновленного кода с помощью команды bash. Вы заметите, что он предложит вам путь к файлу.

 

Пример 03:

Приведем еще один пример запроса ввода в оболочке. Запишите приведенный ниже код в файл «input.sh». У нас есть две команды чтения для добавления учетных данных пользователя в оболочку. Ключевое слово «-sp» используется, чтобы скрыть учетные данные «Пароль» при входе в оболочку.

#!/bin/bash

read -p 'Имя пользователя' USERNAME

read -sp 'Пароль' Password

echo

echo Спасибо $USERNAME, ваш логин в безопасности

 

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

 

Пример 04:

У нас есть еще один пример чтения нескольких имен автомобилей как значений из пользовательской оболочки bash. Для этого нам потребовались три переменные: «car1», «car2» и «car3». У нас есть echo-комментарий, в котором запрашиваются названия автомобилей. Команда чтения используется для чтения введенных пользователем значений (названий автомобилей) в оболочке. Следующие три оператора echo будут последовательно выводить сообщения с названиями автомобилей.

#!/bin/bash

echo Какая машина вам нравиться?

read car1 car2 car3

echo Ваша первая машина: $car1

echo Ваша вторая машина: $car2

echo Ваша третья машина: $car3

 

Читать  Команда Sed для удаления строки

Используя команду bash, запустите файл. Он запросит названия понравившихся автомобилей. Когда пользователь вводит названия автомобилей последовательно, он сохраняет их в переменных команды чтения и распечатывает их, используя следующие три оператора эха один за другим.

 

Пример 05:

В приведенном выше примере мы видели, как запрашивать ввод данных пользователем при сохранении ввода в трех переменных. В этом примере мы узнаем, как читать значения, введенные пользователем в одной переменной, как элементы массива, используя ключевое слово «-a». Итак, откройте тот же файл и напишите в нем приведенный ниже код. Оператор echo попросит вас ввести требуемый ввод. В операторе чтения есть ключевое слово «-a», чтобы принимать от пользователя несколько значений и сохранять их в одном массиве переменных «NAMES». В последнем операторе echo все введенные значения печатаются как элементы массива в текстовой строке.

#!/bin/bash

echo "Введите имена:"

read -a NAMES

echo "Введенные  имя являются: ${NAMES[0]}, ${NAMES[1]}, ${NAMES[2]}"

 

При запуске файла «input.sh» пользователю было предложено ввести значения. Когда пользователь вводит значения, эти значения сохраняются в переменной массива «NAMES». После сохранения этих значений будет выполнен оператор echo, который распечатает введенные имена в виде значений массива внутри себя, как показано.

 

Пример 06:

Возьмем тот же файл с небольшими изменениями в скрипте. Мы написали две команды чтения для получения значения от пользователя в качестве ввода в оболочке и сохранили их в двух переменных: «NUM1» и «NUM2». После этого обе переменные были распечатаны.

read -p "Введите первое значение:" NUM1

read -p "Введите второе значение:" NUM2

echo $NUM1

echo $NUM2

 

Читать  Как установить файл с расширением .DEB в Ubuntu

В командном терминале напишите команду Chmod, чтобы назначить этому файлу права на выполнение.

$ chmod+x input.sh

 

Когда вы запустите этот файл с помощью bash, вы увидите, что он предложит вам последовательно добавлять числа. Когда вы вводите требуемые значения, он распечатывает оба числа по отдельности.

Если вы хотите убедиться, что какое-либо поле или переменная оставлено пустым пользователем, вы можете обновить предыдущий код, как показано ниже. Ключевое слово «-z» используется для проверки обеих переменных, если в них есть пробелы.

read -p "Введите первое значение:" NUM1

read -p "Введите второе значение:" NUM2

echo $NUM1

echo $NUM2

 
##########################
if [ -z "$NUM1"] || [ -z "$NUM2"]

then

echo "Введенное значение не может быть пустым. повторите пожалуйста"

exit 0

fi
##########################

 

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

Давайте попробуем тот же код с некоторыми условиями над числами, введенными пользователем. Если пользователь вводит какой-либо символ, кроме упомянутых в приведенном ниже коде, он передаст сообщение.

read -p "Введите первое значение:" NUM1

read -p "Введите второе значение:" NUM2

echo $NUM1

echo $NUM2

 
##########################
if [ -z "$NUM1"] || [ -z "$NUM2"]

then

echo "Введенное значение не может быть пустым. повторите пожалуйста"

exit 0

fi
##########################
if ! [[ "$NUM1" =~ ^[+-]?[0-9]+\.?[0-9]*$ ]] || [[ "NUM2" =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]

then

echo "Введен был номер"

exit 0

fi

 

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

 

Вывод

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Много лет назад Raspberry Pi Foundation произвел впечатление на компьютерную…

Спасибо!

Теперь редакторы в курсе.