Как использовать команду read в Linux?

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

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

Что такое команда Read

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

Например, если число или счетчик равен нулю, то это означает конец файла. Но в случае успеха возвращается количество прочитанных байтов. Если команда read обнаруживает ошибки, она возвращает -1.

Прежде чем изучать возможности команды read, давайте рассмотрим синтаксис команды:

read [options] [name…]

Здесь параметр options задает различные флаги, которые используются для изменения поведения команды read. Кроме того, параметр name задает имена нескольких переменных, которые используются для хранения входных данных. Если имена не указаны, ввод сохраняется в bash-переменной $REPLY.

Параметры команды Read

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

Давайте рассмотрим некоторые опции, которые можно использовать с командой read:

Опции Описания
-a Сохраняет входные данные в виде массива вместо отдельных переменных.
-s Запускается без оповещения, то есть ввод не отображается на терминале
-e включает поддержку библиотеки readline, позволяя читать строку ввода
-i задает начальное значение ввода, которое отображается в подсказке при использовании readline
-p отображает указанную подсказку перед чтением ввода
-u чтение из указанного дескриптора файла, а не из стандартного ввода (stdin)
-d позволяет указать разделитель входных строк вместо используемого по умолчанию символа новой строки
-t устанавливает таймаут для ввода; если ввод не получен в течение этого времени, чтение возвращает сбой
-r если установлено, обратные слэши не рассматриваются как экранирующие символы
-n считывает только указанное количество символов

Введите следующую команду, чтобы вывести справочное меню команды read:

head --help

Как считать введенные данные с помощью команды Read

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

Рассмотрим это на примере:

read
<user_input>

Теперь, после ввода данных, давайте выведем их на экран с помощью команды echo:

echo $REPLY

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

read variable1
<user_input>

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

echo $variable1

Чтение нескольких значений

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

Рассмотрим следующий пример:

read variable1 variable2 variable3
<user_input>

Здесь в первой переменной хранится первое слово предложения, во второй – второе, а в последней – все оставшиеся слова.

Вернем результат с помощью следующей команды:

echo <$variabl_namee>

Чтение из файла

Хотя read предназначен в основном для пользовательского ввода, вы также можете использовать его для чтения строк из файла. Для этого просто используйте цикл 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

Как запросить ввод с помощью команды Read

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

Давайте отобразим пользовательскую подсказку и перехватим ввод:

read -p "Enter your Name: " name

Ограничение пользовательского ввода при чтении

Хотите контролировать вводимые пользователями символы? Используйте опцию -n в команде read, чтобы указать желаемую длину символов. Например, если вы хотите захватить первые 4 символа пользовательского ввода, используйте следующую команду:

read -n 9 variable

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

Разделение полей вывода с помощью IFS

Вы можете использовать переменную Internal Field Separator (IFS) с командой read, чтобы определить, как разделить вводимые данные на отдельные поля. По умолчанию IFS использует символы пробела (табуляция, новая строка и пробел) в качестве разделителей полей. Однако вы можете настроить IFS в соответствии со своими потребностями.

Например, в качестве разделителя можно указать значение двоеточия (:)

IFS=':' read name password
<user_input>
echo "Name: $name, Password: $password"

С помощью переменной IFS вы можете получить от пользователя несколько строк и разделить их на основе значения разделителя.

Установка таймаута на считывание

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

Давайте установим 10-секундный тайм-аут с помощью опции -t:

read -t 10 -p "Enter your name (10 seconds timeout): " name 
<user_input>
echo "Hello, $name!"

Если пользователь ничего не вводит в течение 10 секунд, скрипт продолжает выполнение.

Как скрыть пользовательский ввод

Иногда требуется скрыть пользовательский ввод, например, при вводе конфиденциальной информации, такой как пароли. Этого можно добиться с помощью опции -s команды read:

read -s -p "Enter your password: " password
<user_input>

Сохранив пароль в указанной переменной, вы можете вывести его на экран терминала с помощью команды echo:

echo -e "
Password: $password"

Здесь флаг -e позволяет интерпретировать управляющие последовательности, а управляющая последовательность добавляет новую строку перед выводом.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.maketecheasier.com

Похожие статьи

Комментарии (0)