Человек, который не думает, — не работает (Авессалом Подводный).

5 практических примеров команды read в Linux

5 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
19 октября 2019
5 практических примеров команды read в Linux
С помощью команды read вы можете сделать ваш bash-скрипт интерактивным, принимая вводимые пользователем данные. Научитесь использовать команду чтения в Linux с этими практическими примерами.

 

Что такое команда read в Linux?

Команда read в Linux – это способ взаимодействия пользователей с вводом с клавиатуры, который вы можете увидеть как stdin (стандартный ввод) или другие подобные описания.

Другими словами, если вы хотите, чтобы ваш bash-скрипт принимал ввод от пользователя, вам придется использовать команду read.

Мы собираемся написать несколько простых скриптов bash, чтобы показать вам практическое использование команды read.

 

Прочитайте примеры команды read

Команда read может сбить с толку, особенно для тех, кто плохо знаком со сценариями оболочки. Сценарии, которые мы собираемся использовать здесь, очень просты для понимания и должны легко следовать, особенно если вы практикуете вместе с учебным пособием.

 

Основные концепции программирования

Практически для каждой программы или сценария вы хотите получить информацию от пользователя (входные данные) и сообщить компьютеру, что делать с этой информацией (выходные данные).

Когда вы используете read, вы связываетесь с терминалом bash, который хотите захватить ввод от пользователя. По умолчанию команда создаст переменную для сохранения этого ввода.

read [options] variable_name

 

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

 

1. Команда read без параметров

Когда вы печатаете read без каких-либо дополнительных опций, вам нужно нажать Enter, чтобы начать захват. Система будет захватывать ввод, пока вы снова не нажмете ввод.

По умолчанию эта информация будет храниться в переменной с именем $REPLY.

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

read ↵
привет мир ↵
echo $REPLY ↵
привет мир

 

Подробнее о переменных

Как мы упоминали ранее, переменная $REPLY встроена в read, поэтому вам не нужно объявлять ее.

Это может быть хорошо, если вы имеете в виду только одно приложение, но, скорее всего, вы захотите использовать свои собственные переменные. Когда вы объявляете переменную с помощью read, вам не нужно ничего делать, кроме как ввести имя переменной.

Когда вы хотите вызвать переменную, вы будете использовать $ перед именем. Вот пример, где мы создаем переменную AndreyEx и присваиваем ей значение ввода.

Вы можете использовать команду echo, чтобы убедиться, что команда read сделала свое дело:

read AndreyEx ↵
Администрирование серверов на основе Linux.
echo $AndreyEx ↵
Администрирование серверов на основе Linux.

 

Напоминание
Имена переменных чувствительны к регистру.

 

2. Оперативный вариант -p

Если вы пишете сценарий и хотите захватить ввод пользователя, существует опция чтения, чтобы создать подсказку, которая может упростить ваш код. Кодирование это все о эффективности, верно?

Вместо использования дополнительных строк и команд эха, вы можете просто использовать флаг -p опции. Текст, который вы вводите в кавычки, будет отображаться так, как задумано, и пользователю не нужно будет нажимать клавишу ввода, чтобы начать ввод данных.

Поэтому вместо того, чтобы писать две строки кода, вот так:

echo "Каково ваше желаемое имя пользователя? "
read username

 

Вы можете использовать опцию -p с командой read следующим образом:

read -p "Каково ваше желаемое имя пользователя? " username

 

Ввод будет сохранен в переменной $username.

 

3. «Secret» / Тихая опция -s

Мы написали скрипт 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 маскировала ввод при вводе пароля. Тем не менее, это поверхностный метод и не предлагает реальной безопасности.

4. Использование ограничения символов с опцией -n

Вы можете добавить ограничение к входу и ограничить его количеством символов длиной n.

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

read -n 5 -p "Каково ваше желаемое имя пользователя? " username

 

Просто добавьте, -n N где N номер вашего выбора.

Мы сделали то же самое для нашего пароля.

bash secret.sh
Каково ваше желаемое имя пользователя? destr_old
Ваше имя пользователя будет destr.
Пожалуйста, введите пароль, который вы хотите использовать:
Вы ввели Pas_1 для вашего пароля.

 

Как видите, программа перестала собирать ввод после 5 символов для имени пользователя.

Тем не менее, мы все еще могли написать МЕНЬШЕ, чем 5 символов, пока мы нажмем ↵после ввода.

Если вы хотите ограничить это, вы можете использовать -N (вместо -n). Эта модификация делает так, что требуется ровно 5 символов, ни меньше, ни больше.

 

5. Хранение информации в массиве -a

Вы также можете использовать команду чтения в 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 впервые, мы опишем:

  • Введите нужные элементы, разделенные пробелами.
  • Если мы поместим только переменную @, она будет повторяться и печатать весь цикл.
  • Символ @ представляет номер элемента, а после двоеточий мы можем указать итерацию от индекса 0 до индекса 3 (как написано здесь).
  • Печатает элемент с индексом 0.
  • Аналогично приведенному выше, но демонстрирует, что элементы разделены пространством

Бонусный совет: добавление функции тайм-аута

Вы также можете добавить тайм-аут к нашему чтению. Если за отведенное время ввод не производится, программа будет продолжена или завершена.

andreyex@pop-os:~$ read -t 3
andreyex@pop-os:~$

 

Это может быть не очевидно, если смотреть на вывод, но терминал подождал три секунды, прежде чем закончился тайм-аут и завершил чтение программы.

 

Заключение

Мы надеемся, что эта статья помогло вам начать работу с командой чтения в Linux. Как всегда, мы рады услышать от наших читателей информацию, которая им интересна. Оставьте комментарий ниже и поделитесь с нами своими мыслями!

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

Просмотров: 368

Если статья понравилась, то поделитесь ей в социальных сетях:

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close