Иногда при взаимодействии с вашей системой Linux вам может потребоваться запросить у пользователей ввод данных или прочитать вводимые данные из файлов или даже установить тайм-ауты. Вы можете выполнять эти и многие другие задачи с помощью команды read
и ее различных параметров.
Эта статья научит вас основам работы команды read
и ее параметрам на многочисленных примерах кода.
Что такое команда чтения
В Linux вы можете использовать команду read
для захвата пользовательского ввода или чтения строки из стандартного ввода (stdin). Эта команда считывает общее количество байтов из заданного файлового дескриптора и сохраняет их в буфере. После этого возвращае
Contents
- 1 Что такое команда чтения
- 2 Читать параметры команды
- 3 Как прочитать введенные данные с помощью команды чтения
- 4 Как запросить ввод с помощью команды чтения
- 5 Ограничение ввода данных пользователем во время чтения
- 6 Разделение полей вывода с помощью IFS
- 7 Настройка тайм-аута чтения
- 8 Как скрыть ввод пользователя
- 9 Подведение итогов
Что такое команда чтения
ноль или ошибка.Например, если число или счетчик равны нулю, это относится к концу файла. Но в случае успеха он возвращает количество прочитанных байтов. Если команда чтения обнаруживает какие-либо ошибки, она возвращает -1.
Прежде чем изучать параметры команды чтения, давайте сначала посмотрим на синтаксис команды чтения:
read [options] [name…]
Здесь параметр options
указывает различные флаги, которые используются для изменения поведения команды чтения. Кроме того, параметр name
указывает имена нескольких переменных, которые используются для хранения входных данных. Если имена не указаны, введенные данные сохраняются в $REPLY
переменная bash .
Читать параметры команды
Команда чтения Bash имеет множество опций для управления вводом пользователя. Некоторым параметрам не нужны дополнительные параметры, а другим — нужны.
Давайте рассмотрим некоторые параметры, которые можно использовать с командой чтения:
Параметры | Описания |
---|---|
-a |
Он сохраняет входные данные в виде массива, а не отдельных переменных. |
-s | Выполняется автоматически, то есть ввод не отображается на терминале |
-e | включает поддержку библиотеки readline, позволяя читать строку ввода |
-i
| предоставляет начальное входное значение, которое появляется в командной строке при использовании readline |
-p | отображает указанное приглашение перед чтением ввода |
-u <дескриптор файла> | читает из указанного дескриптора файла, а не из стандартного ввода (stdin) |
-d | позволяет указать разделитель входной строки вместо символа новой строки по умолчанию |
-t | устанавливает период ожидания для ввода; если ввод не поЧитать параметры командыение возвращает ошибку |
-r | если установлено, обратная косая черта не используется рассматривается как escape-символы |
-n | читает только указанное количество символов |
Введите следующую команду, чтобы вывести меню справки по команде чтения:
head --help
Как прочитать введенные данные с помощью команды чтения
Самый простой способ использовать команду чтения — использовать ее без каких-либо аргументов или опций. Когда вы выполняете только команду чтения, она попросит вас предоставить входные данные, которые вы хотите прочитать. После предоставления входных данных он выйдет и сохранит их в переменной по умолчанию с именем REPLY
.
В качестве примера:
read <user_input>
Теперь, после ввода данных, давайте отобразим их с помощью эхо-команда :
echo $REPLY
При чтении входного значения вы также можете сохранить его в любых других переменных. Например, чтобы сохранить результат в переменную, введите команду read
, а затем имя переменной:
read variable1 <user_input>
Теперь, чтобы отобразить результат, вам нужно использовать команду echo
с переменной, в которой хранится ваше значение:
echo $variable1
Чтение нескольких значений
Не существует прямого способа прочитать несколько значений с помощью команды read
. Однако вы можете разделить одно входное предложение на несколько слов и сохранить их в разных переменных.
Давайте рассмотрим следующий пример:
read variable1 variable2 variable3 <Как прочитать введенные данные с помощью команды чтения
ng="async" src="https://saintist.ru/wp-content/uploads/2024/07/read-multiple-values.png" alt="чтение нескольких значений и сохранение их в нескольких переменных">
Здесь вы сохраняете первое слово предложения в первой переменной, второе слово — во второй переменной, а все оставшиеся слова — в последней предоставленной переменной.
Давайте вернем вывод с помощью следующей команды:
echo <$variabl_namee>
Чтение из файла
Хотя чтение предназначено в первую очередь для ввода данных пользователем, его также можно использовать для чтения строк из файла. Для этого просто используйте цикл while
, команду echo
и команду read
, за которыми следует определенное имя переменной:
while read line; do echo "$line" done < samplefile.txt
Здесь цикл while
считывает каждую строку файла «samplefile.txt» и записывает ее в переменную line
. После чтения всех строк файла команда echo
показывает значение строки.
Циклическое чтение ввода
Вы также можете фиксировать пользовательский ввод в повторяющейся последовательности, используя чтение с циклом while. Это полезно, если вы хотите собрать несколько входных данных или продолжать до тех пор, пока не будет выполнено определенное условие.
Например, давайте прочитаем несколько входных данных и отобразим их на терминале:
while read line; do echo "Line: $line" done
Более того, цикл продолжается до тех пор, пока не будет получен сигнал конца файла (EOF), обычно путем нажатия Ctrl+ D.
Как запросить ввод с помощью команды чтения
Вы также можете создавать интерактивные подсказки, которые будут отображаться перед вводом пользователя. Это можно сделать, используя параметр -p
вместе с командой чтения.
Давайте отобразим пользовательское приглашение, а также зафиксируем введенные данные:
readЧтение нескольких значений Name: " name
Ограничение ввода данных пользователем во время чтения
Хотите контролировать, какие данные могут вводить пользователи? Используйте опцию -n
с read, чтобы указать желаемую длину символов. Например, если вы хотите записать первые 4 символа пользовательского ввода, используйте следующую команду:
read -n 9 variable
После выполнения указанной выше команды можно ввести только девять символов. Ограничение пользовательского ввода во время чтения устранит необходимость в разделителе, а также не разбивает ввод на слова.
Разделение полей вывода с помощью IFS
Вы можете использовать переменную внутреннего разделителя полей (IFS) с командой чтения, чтобы определить, как разделить входные данные на отдельные поля. По умолчанию IFS использует пробельные символы (табуляция, новая строка и пробел) в качестве разделителей полей. Однако вы можете настроить IFS в соответствии со своими потребностями.
Например, в качестве разделителя можно указать двоеточие (:):
IFS=':' read name password <user_input> echo "Name: $name,Чтение из файла
d"
С помощью переменной IFS вы можете захватывать несколько введенных пользователем строк и разделять их по значению разделителя.
Настройка тайм-аута чтения
Вы также можете настроить таймаут для команды чтения, используя опцию -t
. Это полезно, если вы хотите убедиться, что сценарий не будет зависеть от пользовательского ввода в течение длительного времени.
Давайте установим 10-секундный тайм-аут, используя параметр -t
:
read -t 10 -p "Enter your name (10 seconds timeout): " name <user_input> echo "Hello, $name!"
Если пользователь ничего не вводит в течение 10 секунд,
Циклическое чтение ввода
Как скрыть ввод пользователя
Иногда вам может потребоваться скрыть вводимые пользователем данные, например, при вводе конфиденциальной информации, например паролей. Этого можно добиться, используя параметр -s
команды чтения:
read -s -p "Enter your password: " password <user_input>
После сохранения пароля в указанной переменной вы можете отобразить его в терминале с помощью команды echo
:
echo -e "\nPassword: $password"
Здесь флаг -e
позволяет интерпретировать escape-последовательности, а escape-последовательность \n
добавляет новую строку перед выводом.
Подведение итогов
Как запросить ввод с помощью команды чтения
ью и проработаете примеры, вы уже будете знакомы с использованием команды чтения в терминале Linux. Однако есть еще несколько команд, которые стоит изучить. Продолжайте читать, чтобы узнать базовые команды для новичков .Изображение предоставлено: Габриэль Хейнцер через Unsplash . Все скриншоты сделаны Харуном Джаведом.