С помощью команды read вы можете сделать ваш bash-скрипт интерактивным, принимая вводимые пользователем данные. Научитесь использовать команду чтения в Linux с этими практическими примерами.
Команда read в Linux — это способ взаимодействия пользователей с вводом с клавиатуры, который вы можете увидеть как stdin (стандартный ввод) или другие подобные описания.
Другими словами, если вы хотите, чтобы ваш bash-скрипт принимал ввод от пользователя, вам придется использовать команду read.
Мы собираемся написать несколько простых скриптов bash, чтобы показать вам практическое использование команды read.
Команда read может сбить с толку, особенно для тех, кто плохо знаком со сценариями оболочки. Сценарии, которые мы собираемся использовать здесь, очень просты для понимания и должны легко следовать, особенно если вы практикуете вместе с учебным пособием.
Практически для каждой программы или сценария вы хотите получить информацию от пользователя (входные данные) и сообщить компьютеру, что делать с этой информацией (выходные данные).
Когда вы используете read, вы связываетесь с терминалом bash, который хотите захватить ввод от пользователя. По умолчанию команда создаст переменную для сохранения этого ввода.
read [options] variable_name
Теперь давайте посмотрим несколько примеров команды чтения, чтобы понять, как вы можете использовать ее в различных ситуациях.
Когда вы печатаете read без каких-либо дополнительных опций, вам нужно нажать Enter, чтобы начать захват. Система будет захватывать ввод, пока вы снова не нажмете ввод.
По умолчанию эта информация будет храниться в переменной с именем $REPLY.
Для упрощения работы с первым примером мы будем использовать символ ↵, который будет отображаться при нажатии клавиши ввода.
read ↵ привет мир ↵ echo $REPLY ↵ привет мир
Как мы упоминали ранее, переменная $REPLY встроена в read, поэтому вам не нужно объявлять ее.
Это может быть хорошо, если вы имеете в виду только одно приложение, но, скорее всего, вы захотите использовать свои собственные переменные. Когда вы объявляете переменную с помощью read, вам не нужно ничего делать, кроме как ввести имя переменной.
Когда вы хотите вызвать переменную, вы будете использовать $ перед именем. Вот пример, где мы создаем переменную AndreyEx и присваиваем ей значение ввода.
Вы можете использовать команду echo, чтобы убедиться, что команда read сделала свое дело:
read AndreyEx ↵ Администрирование серверов на основе Linux. echo $AndreyEx ↵ Администрирование серверов на основе Linux.
Если вы пишете сценарий и хотите захватить ввод пользователя, существует опция чтения, чтобы создать подсказку, которая может упростить ваш код. Кодирование это все о эффективности, верно?
Вместо использования дополнительных строк и команд эха, вы можете просто использовать флаг -p опции. Текст, который вы вводите в кавычки, будет отображаться так, как задумано, и пользователю не нужно будет нажимать клавишу ввода, чтобы начать ввод данных.
Поэтому вместо того, чтобы писать две строки кода, вот так:
echo "Каково ваше желаемое имя пользователя? " read username
Вы можете использовать опцию -p с командой read следующим образом:
read -p "Каково ваше желаемое имя пользователя? " username
Ввод будет сохранен в переменной $username.
Мы написали скрипт Simpe Bash, чтобы продемонстрировать следующий флаг. Сначала взгляните на результат.
bash secret.sh Каково ваше желаемое имя пользователя? destr_old Ваше имя пользователя будет destr_old. Пожалуйста, введите пароль, который вы хотите использовать: Вы ввели Pass123 для вашего пароля. Маскировка того, что введено, не скрывает данные в любом случае.
Вот содержание, secret.sh, если вы хотите воссоздать его.
#!/bin/bash read -p "Каково ваше желаемое имя пользователя? " username echo "Ваше имя пользователя будет" $username"." read -s -p "Пожалуйста, введите пароль, который вы хотите использовать: " password echo echo "Вы вошли" $password "для вашего пароля." echo "Маскировка того, что введено, не скрывает данные в любом случае."
Как видите, опция -s маскировала ввод при вводе пароля. Тем не менее, это поверхностный метод и не предлагает реальной безопасности.
Вы можете добавить ограничение к входу и ограничить его количеством символов длиной n.
Давайте использовать тот же скрипт из предыдущего, но изменим его так, чтобы ввод был ограничен 5 символами.
read -n 5 -p "Каково ваше желаемое имя пользователя? " username
Просто добавьте, -n N где N номер вашего выбора.
Мы сделали то же самое для нашего пароля.
bash secret.sh Каково ваше желаемое имя пользователя? destr_old Ваше имя пользователя будет destr. Пожалуйста, введите пароль, который вы хотите использовать: Вы ввели Pas_1 для вашего пароля.
Как видите, программа перестала собирать ввод после 5 символов для имени пользователя.
Тем не менее, мы все еще могли написать МЕНЬШЕ, чем 5 символов, пока мы нажмем ↵после ввода.
Если вы хотите ограничить это, вы можете использовать -N (вместо -n). Эта модификация делает так, что требуется ровно 5 символов, ни меньше, ни больше.
Вы также можете использовать команду чтения в Linux для создания своих собственных массивов. Это означает, что мы можем назначить порции ввода для элементов в массиве. По умолчанию клавиша пробела будет разделять элементы.
andreyex@pop-os:~$ read -a array abc def 123 x y z andreyex@pop-os:~$ echo ${array[@]} abc def 123 x y z andreyex@pop-os:~$ echo ${array[@]:0:3} abc def 123 andreyex@pop-os:~$ echo ${array[0]} abc andreyex@pop-os:~$ echo ${array[5]} z
Если вы плохо знакомы с массивами или видите, их в bash впервые, мы опишем:
Вы также можете добавить тайм-аут к нашему чтению. Если за отведенное время ввод не производится, программа будет продолжена или завершена.
andreyex@pop-os:~$ read -t 3 andreyex@pop-os:~$
Это может быть не очевидно, если смотреть на вывод, но терминал подождал три секунды, прежде чем закончился тайм-аут и завершил чтение программы.
Мы надеемся, что эта статья помогло вам начать работу с командой чтения в Linux. Как всегда, мы рады услышать от наших читателей информацию, которая им интересна. Оставьте комментарий ниже и поделитесь с нами своими мыслями!