Linux bash reading file

Команда read в Bash

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

В этой статье мы рассмотрим встроенную команду read .

Встроенное read Bash

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

Общий синтаксис встроенной функции read имеет следующий вид:

Чтобы проиллюстрировать, как работает команда, откройте терминал, введите read var1 var2 и нажмите «Enter». Команда будет ждать, пока пользователь введет данные. Введите два слова и нажмите «Enter».

read var1 var2Hello, World!

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

Вместо того, чтобы вводить текст на терминале, вы можете передать стандартный ввод для read с помощью других методов, таких как piping, here-string или heredoc :

echo "Hello, World!" | (read var1 var2; echo -e "$var1 n$var2")

Вот пример использования строки здесь и printf :

read -r var1 var2 printf "var1: %s nvar2: %sn" "$var1" "$var2"

Если команде read не задан аргумент, вся строка присваивается переменной REPLY :

echo "Hello, world!" | (read; echo "$REPLY")

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

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 nVar2: $var2")
Var1: Linux Var2: is awesome. 

В противном случае, если количество аргументов меньше количества имен, оставшимся именам присваивается пустое значение:

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3")
Var1: Hello, Var2: World! Var3: 

По умолчанию read интерпретирует обратную косую черту как escape-символ, что иногда может вызывать неожиданное поведение. Чтобы отключить экранирование обратной косой черты, вызовите команду с параметром -r .

Ниже приведен пример, показывающий, как работает read при вызове с параметром -r и без него:

Как правило, вы всегда должны использовать read с параметром -r .

Изменение разделителя

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

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")

Когда IFS установлен на символ, отличный от пробела или табуляции, слова разделяются ровно одним символом:

echo "Linux::is:awesome." | (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3 nVar4: $var4")

Строка разделена четырьмя словами. Второе слово — это пустое значение, представляющее отрезок между разделителями. Он создан, потому что мы использовали два символа-разделителя рядом друг с другом ( :: .

Var1: Linux Var2: Var3: is Var4: awesome. 

Для разделения строки можно использовать несколько разделителей. При указании нескольких разделителей присваивайте символы переменной IFS без пробела между ними.

Вот пример использования _ и - качестве разделителей:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")

Строка подсказки

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

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

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

Приведенный ниже код предложит пользователю перезагрузить систему :

while true; do read -r -p "Do you wish to reboot the system? (Y/N): " answer case $answer in [Yy]* ) reboot; break;; [Nn]* ) exit;; * ) echo "Please answer Y or N.";; esac done 

Если сценарий оболочки просит пользователей ввести конфиденциальную информацию, например пароль, используйте параметр -s который сообщает read не печатать ввод на терминале:

read -r -s -p "Enter your password: " 

Назначьте слова в массив

Чтобы присвоить слова массиву вместо имен переменных, вызовите команду read с параметром -a :

read -r -a MY_ARR  "Linux is awesome." for i in "$MY_ARR[@]>"; do echo "$i" done 

Когда даны и массив, и имя переменной, все слова присваиваются массиву.

Выводы

Команда read используется для разделения строки ввода на слова.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Linux bash reading file

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Read and write files with Bash

bash logo on green background

When you're scripting with Bash, sometimes you need to read data from or write data to a file. Sometimes a file may contain configuration options, and other times the file is the data your user is creating with your application. Every language handles this task a little differently, and this article demonstrates how to handle data files with Bash and other POSIX shells.

Install Bash

Programming and development

If you're on Linux, you probably already have Bash. If not, you can find it in your software repository.

On macOS, you can use the default terminal, either Bash or Zsh, depending on the macOS version you're running.

On Windows, there are several ways to experience Bash, including Microsoft's officially supported Windows Subsystem for Linux (WSL).

Once you have Bash installed, open your favorite text editor and get ready to code.

Reading a file with Bash

In addition to being a shell, Bash is a scripting language. There are several ways to read data from Bash: You can create a sort of data stream and parse the output, or you can load data into memory. Both are valid methods of ingesting information, but each has pretty specific use cases.

Source a file in Bash

When you "source" a file in Bash, you cause Bash to read the contents of a file with the expectation that it contains valid data that Bash can fit into its established data model. You won't source data from any old file, but you can use this method to read configuration files and functions.

For instance, create a file called example.sh and enter this into it:

#!/bin/sh greet opensource.com echo "The meaning of life is $var"

Run the code to see it fail:

$ bash ./example.sh ./example.sh: line 3: greet: command not found The meaning of life is 

Bash doesn't have a command called greet , so it could not execute that line, and it has no record of a variable called var , so there is no known meaning of life. To fix this problem, create a file called include.sh :

Revise your example.sh script to include a source command:

#!/bin/sh source include.sh greet opensource.com echo "The meaning of life is $var"

Run the script to see it work:

$ bash ./example.sh Hello opensource.com The meaning of life is 42

The greet command is brought into your shell environment because it is defined in the include.sh file, and it even recognizes the argument ( opensource.com in this example). The variable var is set and imported, too.

Parse a file in Bash

The other way to get data "into" Bash is to parse it as a data stream. There are many ways to do this. You can use grep or cat or any command that takes data and pipes it to stdout. Alternately, you can use what is built into Bash: the redirect. Redirection on its own isn't very useful, so in this example, I also use the built-in echo command to print the results of the redirect:

Save this as stream.sh and run it to see the results:

$ bash ./stream.sh greet() < echo "Hello $" > var=42 $

For each line in the include.sh file, Bash prints (or echoes) the line to your terminal. Piping it first to an appropriate parser is a common way to read data with Bash. For instance, assume for a moment that include.sh is a configuration file with key and value pairs separated by an equal ( = ) sign. You could obtain values with awk or even cut :

#!/bin/sh myVar=`grep var include.sh | cut -d'=' -f2` echo $myVar

Writing data to a file with Bash

Whether you're storing data your user created with your application or just metadata about what the user did in an application (for instance, game saves or recent songs played), there are many good reasons to store data for later use. In Bash, you can save data to files using common shell redirection.

For instance, to create a new file containing output, use a single redirect token:

#!/bin/sh TZ=UTC date > date.txt

Run the script a few times:

$ bash ./date.sh $ cat date.txt Tue Feb 23 22:25:06 UTC 2021 $ bash ./date.sh $ cat date.txt Tue Feb 23 22:25:12 UTC 2021

To append data, use the double redirect tokens:

#!/bin/sh TZ=UTC date >> date.txt

Run the script a few times:

$ bash ./date.sh $ bash ./date.sh $ bash ./date.sh $ cat date.txt Tue Feb 23 22:25:12 UTC 2021 Tue Feb 23 22:25:17 UTC 2021 Tue Feb 23 22:25:19 UTC 2021 Tue Feb 23 22:25:22 UTC 2021

Bash for easy programming

Bash excels at being easy to learn because, with just a few basic concepts, you can build complex programs. For the full documentation, refer to the excellent Bash documentation on GNU.org.

bash logo on green background

Learn Bash by writing an interactive game

Programming a simple game is a great way to practice a new language and compare it against others you know.

bash logo on green background

My favorite Bash hacks

Improve your productivity with aliases and other shortcuts for the things you forget too often.

Источник

Читайте также:  Linux авторизация в скрипте
Оцените статью
Adblock
detector