Часто при создании сценария Bash необходимо выполнять вычисления в зависимости от вводимых пользователем данных. В этом руководстве, прежде чем выполнять базовую операцию со сценарием оболочки, сначала давайте взглянем на интерпретацию и проверку вводимых пользователем данных. Мы будем использовать встроенную команду чтения Bash для интерпретации пользовательского ввода Bash. Команда чтения принимает какое-то значение в качестве ввода через пользователя и присваивает его переменной. Он считывал только одну строку через командную строку Bash. В этой статье вы узнаете, как интерпретировать ввод пользователя из терминала и скрипта.
Вот синтаксис для реализации команды чтения:
read <variable name>
Давайте рассмотрим простой пример чтения ввода от пользователя в bash при запросе. Откройте терминал и создайте новый файл «input.sh».
touch input.sh
Откройте файл и добавьте в него небольшой код, как показано ниже. Во-первых, оператор echo просит пользователя добавить входное значение. Оператор чтения используется для ввода пользовательского значения, которое будет сохранено в переменной «NAME». Последний оператор echo используется для печати ответа с введенным значением в виде переменной «$NAME».
#!/bin/bash echo Привет, как тебя зовут? read NAME echo Привет, меня зовут $NAME
Запустите файл с помощью команды bash. Сначала он запросит имя. Когда пользователь введет значение, он распечатывает сообщение со значением внутри него.
Откройте старый файл и напишите в него приведенный ниже код. Мы можем использовать встроенную команду read; пользователю с запросом, используя эту опцию -p. Вы должны вызвать, чтобы использовать ключевое слово «readline» -e, чтобы разрешить редактирование строки с помощью клавиш со стрелками. После этого используйте переменную для печати пути к файлу, введенному пользователем в командной оболочке.
read -e -p "Введите путь к файлу" FILEPATH echo $FILEPATH
Давайте проверим вывод этого кода с помощью команды bash в терминале. Вы увидите, что он попросит ввести путь к файлу в оболочке. Когда вы вводите необходимое значение и нажимаете Enter, он распечатывает его.
Если вы хотите предложить ответ, вы должны использовать ключевое слово «–i» после строки, указав путь в кавычках.
read -e -p "Введите путь к файлу" -i "user/local/etc" FILEPATH echo $FILEPATH
Давайте проверим вывод обновленного кода с помощью команды bash. Вы заметите, что он предложит вам путь к файлу.
Приведем еще один пример запроса ввода в оболочке. Запишите приведенный ниже код в файл «input.sh». У нас есть две команды чтения для добавления учетных данных пользователя в оболочку. Ключевое слово «-sp» используется, чтобы скрыть учетные данные «Пароль» при входе в оболочку.
#!/bin/bash read -p 'Имя пользователя' USERNAME read -sp 'Пароль' Password echo echo Спасибо $USERNAME, ваш логин в безопасности
При выполнении вы можете увидеть, что пользователь ввел свои учетные данные, в то время как пароль скрыт при входе. В конце концов, он отобразил сообщение об установки пароля пользователя.
У нас есть еще один пример чтения нескольких имен автомобилей как значений из пользовательской оболочки bash. Для этого нам потребовались три переменные: «car1», «car2» и «car3». У нас есть echo-комментарий, в котором запрашиваются названия автомобилей. Команда чтения используется для чтения введенных пользователем значений (названий автомобилей) в оболочке. Следующие три оператора echo будут последовательно выводить сообщения с названиями автомобилей.
#!/bin/bash echo Какая машина вам нравиться? read car1 car2 car3 echo Ваша первая машина: $car1 echo Ваша вторая машина: $car2 echo Ваша третья машина: $car3
Используя команду bash, запустите файл. Он запросит названия понравившихся автомобилей. Когда пользователь вводит названия автомобилей последовательно, он сохраняет их в переменных команды чтения и распечатывает их, используя следующие три оператора эха один за другим.
В приведенном выше примере мы видели, как запрашивать ввод данных пользователем при сохранении ввода в трех переменных. В этом примере мы узнаем, как читать значения, введенные пользователем в одной переменной, как элементы массива, используя ключевое слово «-a». Итак, откройте тот же файл и напишите в нем приведенный ниже код. Оператор echo попросит вас ввести требуемый ввод. В операторе чтения есть ключевое слово «-a», чтобы принимать от пользователя несколько значений и сохранять их в одном массиве переменных «NAMES». В последнем операторе echo все введенные значения печатаются как элементы массива в текстовой строке.
#!/bin/bash echo "Введите имена:" read -a NAMES echo "Введенные имя являются: ${NAMES[0]}, ${NAMES[1]}, ${NAMES[2]}"
При запуске файла «input.sh» пользователю было предложено ввести значения. Когда пользователь вводит значения, эти значения сохраняются в переменной массива «NAMES». После сохранения этих значений будет выполнен оператор echo, который распечатает введенные имена в виде значений массива внутри себя, как показано.
Возьмем тот же файл с небольшими изменениями в скрипте. Мы написали две команды чтения для получения значения от пользователя в качестве ввода в оболочке и сохранили их в двух переменных: «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
Пробуя этот код, пользователь добавил один специальный символ, который генерирует подсказку.
В этой статье вы успешно научились запрашивать ввод данных пользователем в оболочке и интерпретировать вводимые пользователем данные, используя несколько очень простых примеров.