ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

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

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

 

Давайте проверим вывод этого кода с помощью команды 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

 

Используя команду 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

 

В командном терминале напишите команду 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

 

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

 

Вывод

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

Exit mobile version