Bash прочитать переменную из файла
Я хочу вставить в свой скрипт значение (строку), которое я бы прочитал из текстового файла.
Я хочу прочитать строку из другого текстового файла, поэтому интерпретатор должен читать строку из файла, а не пользовательский ввод.
Для чтения переменных из файла мы можем использовать источник или .
Предположим, что файл содержит следующую строку
. Затем мы можем импортировать эту переменную, используя
Учитывая, что вы хотите, чтобы все содержимое вашего текстового файла хранилось в вашей переменной, вы можете использовать:
Или в чистом bash:
Вы можете сделать это внутри вашего скрипта:
Вы даже можете сделать это несколько раз, например, в цикле
и входным файлом (с именем input.in )
вы можете запустить ее с терминала в одном из следующими двумя способами:
и это будет эквивалентно простому запуску скрипта и ручному вводу данных - он напечатает строку «Привет, Томас. Тебе 26 лет, верно?».
Как ] Раду Рэдеану уже предложил ,вы можете использовать cat внутри вашего скрипта, чтобы прочитать содержимое файла в переменную - в этом случае вам нужно, чтобы каждый файл содержал только одну строку, с только тем значением, которое вы хотите для этой конкретной переменной. В приведенном выше примере вы разделите входной файл на один с именем (скажем, name.in ) и на один с возрастом (скажем, age.in ), и измените строки read name и read age на name = $ (cat name.in) и age = $ (cat age.in) соответственно.
Dari man bash: 1785 , penggantian perintah ini adalah setara ke name = $ (cat "$ file") tetapi lebih pantas.
Если вы хотите использовать несколько строк, вы можете использовать:
Если вы хотите, чтобы пользователь указал файл
Ezt használom egyetlen változó megszerzéséhez egy fájlból
Ha GET_VAR nem található a $ it üres lesz, nem pedig hibát okoz a || igaz .
A grep -P szót használja, amely GNU grep-ben van, de ennek megírásakor nem alapértelmezett az egész grep-ben.
Тем не менее, если вы хотите получить (прочитать) переменную bash из другого файла, лучшим решением всегда будет использовать подоболочку чтобы не возникало конфликтов между вашим сценарием и файлом, который читается:
Мы используем этот метод в SlickStack для многократного получения файла конфигурации без конфликтов.
Если вы планируете использовать несколько переменных из файла или у вас есть другие причины для включения всего другого файла в ваш текущий сценарий, тогда вы можете использовать источник всего файла:
Но в случаях, не связанных с переменными bash, например, в ситуации OP при желании прочитать простая «строка» из текстового файла, ни одно из этих решений не будет работать, и вам придется использовать решение, адаптированное к синтаксису кода, который вы пытаетесь прочитать . например, один из примеров на этой странице с помощью комбинаций grep или awk или @thom [1 182158] решение для чтения заданной строки файла с использованием read .
TL; подоболочки DR лучше всего подходят для переменных bash, в противном случае это зависит от синтаксиса файла . если вы хотите сохранить содержимое файла как переменную bash,попробуйте cat , как описано в (hidden)
В прошлый раз, в третьей части этой серии материалов по bash-скриптам, мы говорили о параметрах командной строки и ключах. Наша сегодняшняя тема — ввод, вывод, и всё, что с этим связано.
Вы уже знакомы с двумя методами работы с тем, что выводят сценарии командной строки:
- Отображение выводимых данных на экране.
- Перенаправление вывода в файл.
STDIN
STDIN — это стандартный поток ввода оболочки. Для терминала стандартный ввод — это клавиатура. Когда в сценариях используют символ перенаправления ввода — < , Linux заменяет дескриптор файла стандартного ввода на тот, который указан в команде. Система читает файл и обрабатывает данные так, будто они введены с клавиатуры.
Многие команды bash принимают ввод из STDIN , если в командной строке не указан файл, из которого надо брать данные. Например, это справедливо для команды cat .
Когда вы вводите команду cat в командной строке, не задавая параметров, она принимает ввод из STDIN . После того, как вы вводите очередную строку, cat просто выводит её на экран.
Циклы for
Оболочка bash поддерживает циклы for , которые позволяют организовывать перебор последовательностей значений. Вот какова базовая структура таких циклов:
В каждой итерации цикла в переменную var будет записываться следующее значение из списка list . В первом проходе цикла, таким образом, будет задействовано первое значение из списка. Во втором — второе, и так далее — до тех пор, пока цикл не дойдёт до последнего элемента.
Создание дескрипторов файлов для ввода данных
После окончания чтения файла можно восстановить STDIN и пользоваться им как обычно:
Перенаправление ввода
В этом примере дескриптор файла 6 использовался для хранения ссылки на STDIN . Затем было сделано перенаправление ввода, источником данных для STDIN стал файл. После этого входные данные для команды read поступали из перенаправленного STDIN , то есть из файла.
После чтения файла мы возвращаем STDIN в исходное состояние, перенаправляя его в дескриптор 6 . Теперь, для того, чтобы проверить, что всё работает правильно, скрипт задаёт пользователю вопрос, ожидает ввода с клавиатуры и обрабатывает то, что введено.
Получение сведений об открытых дескрипторах
Для того, чтобы получить список всех открытых в Linux дескрипторов, можно воспользоваться командой lsof . Во многих дистрибутивах, вроде Fedora, утилита lsof находится в /usr/sbin . Эта команда весьма полезна, так как она выводит сведения о каждом дескрипторе, открытом в системе. Сюда входит и то, что открыли процессы, выполняемые в фоне, и то, что открыто пользователями, вошедшими в систему.
У этой команды есть множество ключей, рассмотрим самые важные.
- -p Позволяет указать ID процесса.
- -d Позволяет указать номер дескриптора, о котором надо получить сведения.
Ключ -a используется для выполнения операции логического И над результатами, возвращёнными благодаря использованию двух других ключей:
Вывод сведений об открытых дескрипторах
Тип файлов, связанных с STDIN , STDOUT и STDERR — CHR (character mode, символьный режим). Так как все они указывают на терминал, имя файла соответствует имени устройства, назначенного терминалу. Все три стандартных файла доступны и для чтения, и для записи.
Посмотрим на вызов команды lsof из скрипта, в котором открыты, в дополнение к стандартным, другие дескрипторы:
Вот что получится, если этот скрипт запустить.
Просмотр дескрипторов файлов, открытых скриптом
Скрипт открыл два дескриптора для вывода ( 3 и 6 ) и один — для ввода ( 7 ). Тут же показаны и пути к файлам, использованных для настройки дескрипторов.
Подавление вывода
Тот же подход используется, если, например, надо очистить файл, не удаляя его:
Как это устроено:
- – Объявление оболочки “bash”
- – Вывод команды cat, отправленной как вход в цикл while с использованием пайпа «|» и сохранение содержимого строки в переменной «y»
- – Часть цикла while (начальная точка) – echo для вывода, а «$ y» означает вывода значения переменной, т.е. строки
- – Завершение цикла while с done
Совет: мы можем объединить все команды и использовать их как одинарные.
▍Временное перенаправление вывода
Если запустить скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.
Временное перенаправление
Запустим скрипт так, чтобы вывод STDERR попадал в файл.
Обход файлов, содержащихся в директории
Один из самых распространённых вариантов использования циклов for в bash-скриптах заключается в обходе файлов, находящихся в некоей директории, и в обработке этих файлов.
Например, вот как можно вывести список файлов и папок:
Если вы разобрались с предыдущим материалом из этой серии статей, вам должно быть понятно устройство конструкции if-then , а так же то, как отличить файл от папки. Если вам сложно понять вышеприведённый код, перечитайте этот материал.
Вот что выведет скрипт.
Вывод содержимого папки
Обратите внимание на то, как мы инициализируем цикл, а именно — на подстановочный знак «*» в конце адреса папки. Этот символ можно воспринимать как шаблон, означающий: «все файлы с любыми именами». он позволяет организовать автоматическую подстановку имён файлов, которые соответствуют шаблону.
При проверке условия в операторе if , мы заключаем имя переменной в кавычки. Сделано это потому что имя файла или папки может содержать пробелы.
▍Перенаправление потоков ошибок и вывода
Перенаправление ошибок и стандартного вывода
Перенаправление STDERR и STDOUT в один и тот же файл
После выполнения команды то, что предназначено для STDERR и STDOUT , оказывается в файле content .
Заключение
Вы узнали, как прочитать список имен файлов из файла в bash и принять меры по ним.
Инициализация цикла списком, полученным из результатов работы команды
Ещё один способ инициализации цикла for заключается в передаче ему списка, который является результатом работы некоей команды. Тут используется подстановка команд для их исполнения и получения результатов их работы.
В этом примере задействована команда cat , которая читает содержимое файла. Полученный список значений передаётся в цикл и выводится на экран. Обратите внимание на то, что в файле, к которому мы обращаемся, содержится список слов, разделённых знаками перевода строки, пробелы при этом не используются.
Цикл, который перебирает содержимое файла
Тут надо учесть, что подобный подход, если ожидается построчная обработка данных, не сработает для файла более сложной структуры, в строках которого может содержаться по несколько слов, разделённых пробелами. Цикл будет обрабатывать отдельные слова, а не строки.
Что, если это совсем не то, что нужно?
Команда continue
Когда в теле цикла встречается эта команда, текущая итерация завершается досрочно и начинается следующая, при этом выхода из цикла не происходит. Посмотрим на команду continue в цикле for :
Когда условие внутри цикла выполняется, то есть, когда $var1 больше 5 и меньше 10, оболочка исполняет команду continue . Это приводит к пропуску оставшихся в теле цикла команд и переходу к следующей итерации.
Команда continue в цикле for
Добавить комментарий Отменить ответ
Эта простая однострочная программа для Powershell выведет текущее время работы вашего компьютера. Вывод показан в несколько столбцов, но может быть выведен и в одну строку. PS C:\Users\Windows 11> (get-date) - (gcim Win32_OperatingSystem).LastBootUpTime Days : 0 Hours : 0 Minutes : 41 Seconds : 27 Milliseconds : 915 Ticks : 24879150105 TotalDays : 0.0287953126215278.
Ошибка 504 gateway time-out возникает тогда, когда Nginx не может получить ответ от службы достаточно долго. Например, от PHP-FPM. Nginx и PHP-FPM Наиболее распространенной причиной этой ошибки является совместная работа Nginx и PHP-FPM. В случае очень медленных PHP-скриптов Nginx выдает тайм-аут шлюза 504, когда не ожидает ответа в течение 30 секунд (по умолчанию). Чтобы избавиться.
17 сентября 2021 года произошло событие, всколыхнувшее кинематографический мир. На платформе Netflix появился корейский сериал “Игра в кальмара”. Всего пары недель ему хватило для того, чтобы выйти на первые позиции по популярности не только на Родине, но и в Соединенных Штатах, России. Оценить сюжет сериал можно не только просмотром, но и игрой squid game challenge скачать которую.
Перебор простых значений
Пожалуй, самый простой пример цикла for в bash-скриптах — это перебор списка простых значений:
Ниже показаны результаты работы этого скрипта. Хорошо видно, что в переменную $var последовательно попадают элементы из списка. Происходит так до тех пор, пока цикл не дойдёт до последнего из них.
Простой цикл for
Обратите внимание на то, что переменная $var сохраняет значение при выходе из цикла, её содержимое можно менять, в целом, работать с ней можно как с любой другой переменной.
▍Перенаправление потока ошибок
Bash вывести имена файлов из текстового файла
Синтаксис следующий для чтения имен файлов из текстового файла:
Чтение имен файлов из текстового файла с помощью цикла bash
Давайте создадим новый файл с именем input.txt с именем файла в каждой строке, используя команду cat или vim:
Вот пример скрипта оболочки bash для построчного чтения файла:
Просто запустите его следующим образом:
Вот обновленная версия скрипта:
Обработка вывода, выполняемого в цикле
Данные, выводимые в цикле, можно обработать, либо перенаправив вывод, либо передав их в конвейер. Делается это с помощью добавления команд обработки вывода после инструкции done .
Например, вместо того, чтобы показывать на экране то, что выводится в цикле, можно записать всё это в файл или передать ещё куда-нибудь:
Оболочка создаст файл myfile.txt и перенаправит в этот файл вывод конструкции for . Откроем файл и удостоверимся в том, что он содержит именно то, что ожидается.
Перенаправление вывода цикла в файл
Перенаправление ввода в скриптах
Для перенаправления ввода можно воспользоваться той же методикой, которую мы применяли для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:
Эта команда указывает оболочке на то, что источником вводимых данных должен стать файл myfile , а не обычный STDIN . Посмотрим на перенаправление ввода в действии:
Вот что появится на экране после запуска скрипта.
Перенаправление ввода
Некоторые администраторы Linux используют этот подход для чтения и последующей обработки лог-файлов.
Итоги
Сегодня мы поговорили о циклах for и while в bash-скриптах, о том, как их запускать, как ими управлять. Теперь вы умеете обрабатывать в циклах строки с разными разделителями, знаете, как перенаправлять данные, выведенные в циклах, в файлы, как просматривать и анализировать содержимое директорий.
В этой статье мы изучим 3 метода в сценарии bash для чтения файла построчно.
Создание собственного перенаправления вывода
Перенаправляя ввод и вывод в сценариях, вы не ограничены тремя стандартными дескрипторами файлов. Как уже говорилось, можно иметь до девяти открытых дескрипторов. Остальные шесть, с номерами от 3 до 8, можно использовать для перенаправления ввода или вывода. Любой из них можно назначить файлу и использовать в коде скрипта.
Назначить дескриптор для вывода данных можно, используя команду exec :
После запуска скрипта часть вывода попадёт на экран, часть — в файл с дескриптором 3 .
Перенаправление вывода, используя собственный дескриптор
Управление циклами
Возможно, после входа в цикл, нужно будет остановить его при достижении переменной цикла определённого значения, которое не соответствует изначально заданному условию окончания цикла. Надо ли будет в такой ситуации дожидаться нормального завершения цикла? Нет конечно, и в подобных случаях пригодятся следующие две команды:
3. Использование имени файла в качестве аргумента
Этот третий метод отправляет имя файла в качестве входного аргумента через командную строку.
Создайте файл скрипта с именем example3.sh, как:
Как это устроено:
- – Объявление оболочки “bash”
- – Запуск цикла while и сохранение содержимого строки в переменной «y»
- – Часть цикла while (начальная точка) – echo для вывода, а «$ y» означает вывод значения переменной, т.е. строки
- – Чтение содержимого файла из аргумента командной строки, то есть $1, с использованием перенаправителя ввода «
Итоги
Сегодня вы узнали о том, как в сценариях командной строки работают ввод и вывод. Теперь вы умеете обращаться с дескрипторами файлов, создавать, просматривать и закрывать их, знаете о перенаправлении потоков ввода, вывода и ошибок. Всё это очень важно в деле разработки bash-скриптов.
В следующий раз поговорим о сигналах Linux, о том, как обрабатывать их в сценариях, о запуске заданий по расписанию и о фоновых задачах.
В прошлый раз мы рассказали об основах программирования для bash. Даже то немногое, что уже разобрано, позволяет всем желающим приступить к автоматизации работы в Linux. В этом материале продолжим рассказ о bash-скриптах, поговорим об управляющих конструкциях, которые позволяют выполнять повторяющиеся действия. Речь идёт о циклах for и while , о методах работы с ними и о практических примерах их применения.
Внимание: в посте спрятана выгода!
Метод 2: использование команды cat
Второй метод – использовать команду cat и затем отправлять ее вывод в качестве входных данных в цикл while, используя pipe.
Создайте файл скрипт example2.sh с таким содержанием:
STDERR
Стандартные дескрипторы файлов
Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов.
Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.
- 0 , STDIN — стандартный поток ввода.
- 1 , STDOUT — стандартный поток вывода.
- 2 , STDERR — стандартный поток ошибок.
Цикл while
Конструкция for — не единственный способ организации циклов в bash-скриптах. Здесь можно пользоваться и циклами while . В таком цикле можно задать команду проверки некоего условия и выполнять тело цикла до тех пор, пока проверяемое условие возвращает ноль, или сигнал успешного завершения некоей операции. Когда условие цикла вернёт ненулевое значение, что означает ошибку, цикл остановится.
Вот схема организации циклов while
while команда проверки условия
do
другие команды
done
Взглянем на пример скрипта с таким циклом:
На входе в цикл проверяется, больше ли нуля переменная $var1 . Если это так, выполняется тело цикла, в котором из значения переменной вычитается единица. Так происходит в каждой итерации, при этом мы выводим в консоль значение переменной до его модификации. Как только $var1 примет значение 0, цикл прекращается.
Результат работы цикла while
Если не модифицировать переменную $var1 , это приведёт к попаданию скрипта в бесконечный цикл.
Команда break
Эта команда позволяет прервать выполнение цикла. Её можно использовать и для циклов for , и для циклов while :
Такой цикл, в обычных условиях, пройдётся по всему списку значений из списка. Однако, в нашем случае, его выполнение будет прервано, когда переменная $var1 будет равна 5.
Досрочный выход из цикла for
Вот — то же самое, но уже для цикла while :
Команда break , исполненная, когда значение $var1 станет равно 5, прерывает цикл. В консоль выведется то же самое, что и в предыдущем примере.
Добавить комментарий Отменить ответ
Эта простая однострочная программа для Powershell выведет текущее время работы вашего компьютера. Вывод показан в несколько столбцов, но может быть выведен и в одну строку. PS C:\Users\Windows 11> (get-date) - (gcim Win32_OperatingSystem).LastBootUpTime Days : 0 Hours : 0 Minutes : 41 Seconds : 27 Milliseconds : 915 Ticks : 24879150105 TotalDays : 0.0287953126215278.
Ошибка 504 gateway time-out возникает тогда, когда Nginx не может получить ответ от службы достаточно долго. Например, от PHP-FPM. Nginx и PHP-FPM Наиболее распространенной причиной этой ошибки является совместная работа Nginx и PHP-FPM. В случае очень медленных PHP-скриптов Nginx выдает тайм-аут шлюза 504, когда не ожидает ответа в течение 30 секунд (по умолчанию). Чтобы избавиться.
17 сентября 2021 года произошло событие, всколыхнувшее кинематографический мир. На платформе Netflix появился корейский сериал “Игра в кальмара”. Всего пары недель ему хватило для того, чтобы выйти на первые позиции по популярности не только на Родине, но и в Соединенных Штатах, России. Оценить сюжет сериал можно не только просмотром, но и игрой squid game challenge скачать которую.
Необходимо прочитать список имен файлов из текстового файла с именем input.txt и принять меры для каждого имени файла.
Как мне прочитать имена файлов из текстового файла и выполнить команду /bin/foo для каждого файла?
Как мне прочитать имена файлов из текстового файла и выполнить определенные действия с этими файлами?
Введение – Часто вам нужно прочитать файл построчно и обработать данные.
Это довольно распространенная задача для скриптов оболочки для Linux и Unix.
Вам нужно использовать bash while loop и команду read.
STDOUT
Итак, у нас есть некий файл с данными, к которому мы можем добавить другие данные с помощью этой команды:
То, что выведет pwd , будет добавлено к файлу myfile , при этом уже имеющиеся в нём данные никуда не денутся.
Перенаправление вывода команды в файл
Попытка обращения к несуществующему файлу
Метод 1: использование перенаправление ввода
Самый простой способ прочитать файл построчно – использовать перенаправитель ввода в цикле while.
Чтобы продемонстрировать, мы создали образец файла с именем mycontent.txt и будем использовать его в этом руководстве.
Давайте создадим скрипт с именем example1.sh, который использует перенаправление ввода и цикл.
Как это устроено:
- – Объявление оболочки “bash”
- – Запуск цикла while и сохранение содержимого строки в переменной «y»
- – Часть цикла while (начальная точка) – echo для вывода, а «$ y» означает вывод значения переменной, т.е. строки
- – Чтение содержимого файла с помощью перенаправителя ввода «
Выполнение скрипта и вывод:
Закрытие дескрипторов файлов
Попытка обращения к закрытому дескриптору файла
Всё дело в том, что мы попытались обратиться к несуществующему дескриптору.
Будьте внимательны, закрывая дескрипторы файлов в сценариях. Если вы отправляли данные в файл, потом закрыли дескриптор, потом — открыли снова, оболочка заменит существующий файл новым. То есть всё то, что было записано в этот файл ранее, будет утеряно.
Перенаправление вывода в скриптах
Существует два метода перенаправления вывода в сценариях командной строки:
- Временное перенаправление, или перенаправление вывода одной строки.
- Постоянное перенаправление, или перенаправление всего вывода в скрипте либо в какой-то его части.
Разделители полей
Причина вышеописанной особенности заключается в специальной переменной окружения, которая называется IFS (Internal Field Separator) и позволяет указывать разделители полей. По умолчанию оболочка bash считает разделителями полей следующие символы:
- Пробел
- Знак табуляции
- Знак перевода строки
Для того, чтобы решить проблему, можно временно изменить переменную среды IFS . Вот как это сделать в bash-скрипте, если исходить из предположения, что в качестве разделителя полей нужен только перевод строки:
После добавления этой команды в bash-скрипт, он будет работать как надо, игнорируя пробелы и знаки табуляции, считая разделителями полей лишь символы перевода строки.
Если этот скрипт запустить, он выведет именно то, что от него требуется, давая, в каждой итерации цикла, доступ к очередной строке, записанной в файл.
Построчный обход содержимого файла в цикле for
Разделителями могут быть и другие символы. Например, выше мы выводили на экран содержимое файла /etc/passwd . Данные о пользователях в строках разделены с помощью двоеточий. Если в цикле нужно обрабатывать подобные строки, IFS можно настроить так:
Заключение
В этом руководстве объясняется, как читать содержимое файла построчно, используя скрипт оболочки bash с примерами.
Это помогает искать строки в нужном файле, читая строки по отдельности.
Спасибо за прочтение, оставляйте свои предложения и отзывы в разделе комментариев.
Обработка содержимого файла
Чаще всего вложенные циклы используют для обработки файлов. Так, внешний цикл занимается перебором строк файла, а внутренний уже работает с каждой строкой. Вот, например, как выглядит обработка файла /etc/passwd :
В этом скрипте два цикла. Первый проходится по строкам, используя в качестве разделителя знак перевода строки. Внутренний занят разбором строк, поля которых разделены двоеточиями.
Обработка данных файла
Такой подход можно использовать при обработке файлов формата CSV, или любых подобных файлов, записывая, по мере надобности, в переменную окружения IFS символ-разделитель.
Перебор сложных значений
В списке, использованном при инициализации цикла for , могут содержаться не только простые строки, состоящие из одного слова, но и целые фразы, в которые входят несколько слов и знаков препинания. Например, всё это может выглядеть так:
Вот что получится после того, как этот цикл пройдётся по списку. Как видите, результат вполне ожидаем.
Перебор сложных значений
TNW-CUS-FMP — промо-код на 10% скидку на наши услуги, доступен для активации в течение 7 дней"
Циклы for в стиле C
Если вы знакомы с языком программирования C, синтаксис описания bash-циклов for может показаться вам странным, так как привыкли вы, очевидно, к такому описанию циклов:
В bash-скриптах можно использовать циклы for , описание которых выглядит очень похожим на циклы в стиле C, правда, без некоторых отличий тут не обошлось. Схема цикла при подобном подходе выглядит так:
На bash это можно написать так:
А вот рабочий пример:
Этот код выведет список чисел от 1 до 10.
Работа цикла в стиле C
Пример: поиск исполняемых файлов
Давайте воспользуемся тем, что мы уже разобрали, и напишем что-нибудь полезное. Например, если надо выяснить, какие именно исполняемые файлы доступны в системе, можно просканировать все папки, записанные в переменную окружения PATH . Весь арсенал средств, который для этого нужен, у нас уже есть, надо лишь собрать всё это воедино:
Такой вот скрипт, небольшой и несложный, позволил получить список исполняемых файлов, хранящихся в папках из PATH .
Поиск исполняемых файлов в папках из переменной PATH
▍Постоянное перенаправление вывода
Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять соответствующую команду к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :
Перенаправление всего вывода в файл
Если просмотреть файл, указанный в команде перенаправления вывода, окажется, что всё, что выводилось командами echo , попало в этот файл.
Команду exec можно использовать не только в начале скрипта, но и в других местах:
Вот что получится после запуска скрипта и просмотра файлов, в которые мы перенаправляли вывод.
Перенаправление вывода в разные файлы
Сначала команда exec задаёт перенаправление вывода из STDERR в файл myerror . Затем вывод нескольких команд echo отправляется в STDOUT и выводится на экран. После этого команда exec задаёт отправку того, что попадает в STDOUT , в файл myfile , и, наконец, мы пользуемся командой перенаправления в STDERR в команде echo , что приводит к записи соответствующей строки в файл myerror.
Освоив это, вы сможете перенаправлять вывод туда, куда нужно. Теперь поговорим о перенаправлении ввода.
Вложенные циклы
В теле цикла можно использовать любые команды, в том числе — запускать другие циклы. Такие конструкции называют вложенными циклами:
Ниже показано то, что выведет этот скрипт. Как видно, сначала выполняется первая итерация внешнего цикла, потом — три итерации внутреннего, после его завершения снова в дело вступает внешний цикл, потом опять — внутренний.
Вложенные циклы
Читайте также: