Green-sell.info

Новые технологии
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Read linux c

The read builtin

read something about read here!

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

Если параметр(ы) дана — строка делится на слова, используя переменную IFS , и каждое слово присваивается как значение переменным в списке параметров . Оставшиеся слова присваиваются последнему параметру если слов больше чем параметров.

Если команде не было определено парамтров вообще, тогда строка полностью считывается(без разделения на слова) и присваивается как значение переменной оболочки REPLY . Тогда REPLY полностью содержит прочитанную строк, лишь с убранными пробелами в начале и в конце.

Опции

. Без оконечного перевода строки, Обычно в ней выводят подсказку, перед тем как команда read будет считывать данные.

Конечно будет правильно, задавать элемент массива как имя переменной, без -a :

Пример: вы находитесь в каталоге с файлом, который имеет имя x1 , и вы хотите прочитать его в массив x , с индексом 1

тогда pathname expansion развернет в имя файла x1 и прервет его работу!

Even worse, if nullglob is set, your array/index will disappear.

Чтобы обойти такое поведение — отключите развертывание пути или экранируйте имя массива и индекс:

Examples

Rudimentary cat replacement

A rudimentary replacement for the cat command: read lines of input from a file and print them on the terminal.

Note: Here, read -r and the default REPLY is used, because we want to have the real literal line, without any mangeling. printf is used, because (depending on settings), echo may interpret some baskslash-escapes or switches (like -n ).

Press any key.

Remember the MSDOS pause command? Here’s something similar:

Reading Columns

Simple Split

Read can be used to split a string:

Take care that you cannot use a pipe:

Why? because the commands of the pipe run in subshells that cannot modify the parent shell. As a result, the variables col1 , col2 and col3 of the parent shell are not modified (see article: Bash and the process tree).

If the variable has more fields than there are variables, the last variable get the remaining of the line:

Changing The Separator

By default reads separates the line in fields using spaces or tabs. You can modify this using the special variable IFS, the Internal Field Separator.

Here we use the var=value command syntax to set the environment of read temporarily. We could have set IFS normally, but then we would have to take care to save its value and restore it afterward ( OLD=$IFS IFS=”:”; read . ;IFS=$OLD ).

The default IFS is special in that 2 fields can be separated by one or more spaces. When you set IFS to something else, the fields are separated by exactly one character:

See how the :: in the middle infact defines an additional empty field.

The fields are separated by exactly one character, but the character can be different between each field:

Are you sure?

Ask for a path with a default value

Note: The -i option was introduced with Bash 4

The user will be prompted, he can just accept the default, or edit it.

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

Главное меню » Операционная система Linux » 5 практических примеров команды read в Linux

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Ms sql server на linux

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

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

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

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

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

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

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

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

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

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

Мы написали скрипт Simpe Bash, чтобы продемонстрировать следующий флаг. Сначала взгляните на результат.

Вот содержание, secret.sh, если вы хотите воссоздать его.

Как видите, опция -s маскировала ввод при вводе пароля. Тем не менее, это поверхностный метод и не предлагает реальной безопасности.

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

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

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

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

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

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

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

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

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

Вы также можете использовать команду чтения в Linux для создания своих собственных массивов. Это означает, что мы можем назначить порции ввода для элементов в массиве. По умолчанию клавиша пробела будет разделять элементы.

Если вы плохо знакомы с массивами или видите, их в bash впервые, мы опишем:

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

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

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

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

Заключение

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

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

5.2. Команда read

5.2. Команда read

Команда read читает одну строку из стандартного входного потока и записывает ее содержимое в указанные переменные. Если задана единственная переменная, в нее записывается вся строка. В результате ввода команды read без параметров строка помешается в переменную среды $reply. При указании нескольких переменных в первую из них записывается первое слово строки, во вторую — второе слово и т. д. Последней переменной присваивается остаток строки.

Общий формат команды таков:

read переменная1 переменная2…

В следующем примере в переменную name записывается весь вводимый с клавиатуры текст до тех пор, пока не будет нажата клавиша [Enter]:

$ read name Джон Алан Доу $ echo $name

Представленная ниже команда заносит введенные имя и фамилию в две переменные. В качестве разделителя между словами используется пробел.

$ read name surname

$ echo $name $surname

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

$ read name surname Джоя Алан Доу

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

Вместо управляющего символа с в команде echo следует указывать опцию -n:

echo -n «Отчество:»

Похожие главы из других книг:

13.4. Альтернативы read() и write()

13.4. Альтернативы read() и write() Несмотря на то что системные вызовы read() и write() как нельзя лучше подходят приложениям для извлечения и хранения данных в файле, все же они не всегда являются самыми быстрыми методами. Они допускают управление отдельными порциями данных; для

16.5.9. Управление read()

16.5.9. Управление read() Два элемента в массиве с_сс не являются управляющими символами и имеют отношение только к неформатируемому режиму: VTIME и VMIN. В этом режиме они определяют, когда возвращается read(). В каноническом режиме read() возвращается только в том случае, если строки

Читать еще:  Sql server linux установка

Функция read(2) и readv(2)

Функция read(2) и readv(2) Функции read(2) и readv(2) позволяют считывать данные из файла, на который указывает файловый дескриптор, полученный с помощью функций open(2), creat(2), dup(2), dup2(2), pipe(2) или fcntl(2). Функции имеют следующий вид:#include ssize_t read(int fildes, void *buf, size_t nbyte);#include #include

10.1.2.3 Read и Writе

10.1.2.3 Read и Writе Алгоритмы чтения и записи ядром на устройстве похожи на аналогичные алгоритмы для файлов обычного типа. Если процесс производит чтение или запись на устройстве посимвольного ввода-вывода, ядро запускает процедуры read или write, определяемые типом драйвера.

4.6.5. Команда mv

4.6.5. Команда mv Если вам необходимо не скопировать, а переместить файл из одного каталога в другой, вы можете воспользоваться командой mv. Синтаксис этой команды аналогичен синтаксису команды cp. Более того, она сначала копирует файл (или каталог), а только потом удаляет

5.4.3 Команда cat

5.4.3 Команда cat Мы уже рассматривали кратко команду cat в предыдущем разделе. В данном разделе эта команда интересует нас в основном потому, что чаще всего она работает как раз с входным и выходным потоками. По умолчанию выход команды cat направляется в выходной поток. Чтобы

5.10. Команда sh

5.10. Команда sh Вы всегда можете запустить новый экземпляр оболочки bash, дав команду bash или sh. При этом можно заставить новый экземпляр оболочки выполнить какой-то скрипт, если передать имя скрипта в виде аргумента команды bash. Так, для выполнения скрипта myscript надо дать

8.4.2. Команда top

8.4.2. Команда top Команда ps позволяет сделать как бы «моментальный снимок» процессов, запущенных в системе. В отличие от ps команда top отображает состояние процессов и их активность «в реальном режиме времени». На рисунке 8.5 изображено окно терминала, в котором запущена

Книги must read

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

Пример 9-4. Ограничение времени ожидания команды read

Пример 9-4. Ограничение времени ожидания команды read #!/bin/bash# t-out.sh TIMELIMIT=4 # 4 секундыread -t $TIMELIMIT variable

Пример 11-4. Ввод многострочного текста с помощью read

Пример 11-4. Ввод многострочного текста с помощью read #!/bin/bashechoecho «Введите строку, завершающуюся символом , и нажмите ENTER.»echo «Затем введите вторую строку, и снова нажмите ENTER.»read var1 # При чтении, символ «» экранирует перевод строки. # первая строка # вторая

Пример 11-6. Чтение командой read из файла через перенаправление

Пример 11-6. Чтение командой read из файла через перенаправление #!/bin/bashread var1

3.2. Команда at

3.2. Команда at Команда at позволяет передавать задания демону cron для одноразового выполнения в назначенное время. Выдавая задание, команда at сохраняет в отдельном файле как его текст, так и все текущие переменные среды. Заметим, что команда crontab не делает этого. По умолчанию

24.1.1. Команда pwd

24.1.1. Команда pwd Эта команда отображает текущий каталог:$

The read builtin

read something about read here!

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

Если параметр(ы) дана — строка делится на слова, используя переменную IFS , и каждое слово присваивается как значение переменным в списке параметров . Оставшиеся слова присваиваются последнему параметру если слов больше чем параметров.

Если команде не было определено парамтров вообще, тогда строка полностью считывается(без разделения на слова) и присваивается как значение переменной оболочки REPLY . Тогда REPLY полностью содержит прочитанную строк, лишь с убранными пробелами в начале и в конце.

Опции

. Без оконечного перевода строки, Обычно в ней выводят подсказку, перед тем как команда read будет считывать данные.

Конечно будет правильно, задавать элемент массива как имя переменной, без -a :

Пример: вы находитесь в каталоге с файлом, который имеет имя x1 , и вы хотите прочитать его в массив x , с индексом 1

тогда pathname expansion развернет в имя файла x1 и прервет его работу!

Even worse, if nullglob is set, your array/index will disappear.

Чтобы обойти такое поведение — отключите развертывание пути или экранируйте имя массива и индекс:

Examples

Rudimentary cat replacement

A rudimentary replacement for the cat command: read lines of input from a file and print them on the terminal.

Note: Here, read -r and the default REPLY is used, because we want to have the real literal line, without any mangeling. printf is used, because (depending on settings), echo may interpret some baskslash-escapes or switches (like -n ).

Press any key.

Remember the MSDOS pause command? Here’s something similar:

Reading Columns

Simple Split

Read can be used to split a string:

Take care that you cannot use a pipe:

Why? because the commands of the pipe run in subshells that cannot modify the parent shell. As a result, the variables col1 , col2 and col3 of the parent shell are not modified (see article: Bash and the process tree).

Читать еще:  Management studio linux

If the variable has more fields than there are variables, the last variable get the remaining of the line:

Changing The Separator

By default reads separates the line in fields using spaces or tabs. You can modify this using the special variable IFS, the Internal Field Separator.

Here we use the var=value command syntax to set the environment of read temporarily. We could have set IFS normally, but then we would have to take care to save its value and restore it afterward ( OLD=$IFS IFS=”:”; read . ;IFS=$OLD ).

The default IFS is special in that 2 fields can be separated by one or more spaces. When you set IFS to something else, the fields are separated by exactly one character:

See how the :: in the middle infact defines an additional empty field.

The fields are separated by exactly one character, but the character can be different between each field:

Are you sure?

Ask for a path with a default value

Note: The -i option was introduced with Bash 4

The user will be prompted, he can just accept the default, or edit it.

TechyTalk

Thoughts on Magento, PHP, Linux and open source

Linux system programming: Open file, read file and write file

This is my first article in what I’m hoping will be a series of articles on system programming for POSIX compliant operating systems with focus on Linux. Actually I’ve touched this topic a while ago when I wrote three articles about library programming on Linux (static libraries, dynamic libraries and dynamic libraries using POSIX API). In this series my goal is to go trough basics of Linux system programming from the easiest topics like open file, read file and file write to a bit more complicated things like Berkeley sockets network programming. So lets get started with environment setup and an example of program that copies source file into destination file using POSIX API system calls to demonstrate open(), read() and write() system calls on Linux operating system.

Configuring your environment

I’ll use my trustworthy Ubuntu Linux operating system but you can actually use any POSIX compliant operating system, the only difference will probably be that you will need to configure your environment differently. What we need to begin with Linux system programming is gcc compiler with related packages and POSIX related man pages. So here’s how to install this packages on Ubuntu based operating system:

Basically that’s all you need to create serious system tools for Linux operating system. Later we will probably need some more libraries but we will install them when necessary.

open(), read() and write() system calls

If you have named this code file sp_linux_copy.c and if you want to name executable file sp_linux_copy to compile this program you would probably use something like this:

Then if your source file is named source_file.txt and if you want to name the destination file destination_file.txt you would run this program like this:

Now lets go trough the code and explain tricky parts. First thing we must do is to include necessary header files. Man page of every system call tells you what header files you need to include to be able to use this system call. Second we will define constant we will use to define size of our buffer in bytes. Smaller buffer size will make our copy process longer but it will save memory. Next we open source and destination file descriptors, source with O_RDONLY to make it read only, destination with O_WRONLY | O_CREAT to make it writable and to create destination file with 0644 file system permission flags. In case of error we use perror() man 3 perror to print relatively user friendly error message.

Now we are ready to start copy process. We run read() and write() inside loop (because source file might be bigger than our buffer) to copy from one file into another. Important to notice is that write() is using number of bytes read from source file returned by read() so it would know how much to write into destination file. If number of bytes read (ret_in) and number of bytes written (ret_out) differ this indicates error so once again we use perror() to print out error description. At the end if all went well we do cleanup by closing both file descriptors and returning 0 (EXIT_SUCCESS) to indicate that program ended without errors.

That’s it for this introductory article on Linux system programming topic. In my next article I will show you few more examples on POSIX input/output and then move on to memory management related system calls.

A quality focused Magento specialized web development agency. Get in touch!

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×