Linux bash прочитать файл

Linux bash прочитать файл

Есть файл с путём /papka1/file в котором записано 123, как считать ето 123 в переменную Data123 в Shell.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Оглавление

  • Как в Shell прочитать содержимое файла в переменную, phpcoder, 17:40 , 27-Авг-07, ( 1 )
    • Как в Shell прочитать содержимое файла в переменную, vic, 18:37 , 27-Авг-07, ( 2 )
      • Как в Shell прочитать содержимое файла в переменную, AMDmi3, 22:30 , 27-Авг-07, ( 3 )
        • Как в Shell прочитать содержимое файла в переменную, Voblin, 10:34 , 28-Авг-07, ( 4 )
        • Как в Shell прочитать содержимое файла в переменную, vic, 16:09 , 28-Авг-07, ( 5 )

Сообщения по теме [Сортировка по времени, UBB]

>Есть файл с путём /papka1/file в котором записано 123, как считать ето
>123 в переменную Data123 в Shell.

1 . «Как в Shell прочитать содержимое файла в переменную»
Сообщение от phpcoder (??) on 27-Авг-07, 17:40
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2 . «Как в Shell прочитать содержимое файла в переменную»
Сообщение от vic (??) on 27-Авг-07, 18:37

имхо, двойные кавычки лишние 🙂

Data123=`cat /papka1/file`
или вот так
Data123=$(cat /papka1/file)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3 . «Как в Shell прочитать содержимое файла в переменную»
Сообщение от AMDmi3 (??) on 27-Авг-07, 22:30

>Data123=`cat /papka1/file`
>или вот так
>Data123=$(cat /papka1/file)

Можно еще не подождая лишний процесс:
read Data123 4 . «Как в Shell прочитать содержимое файла в переменную»

Сообщение от Voblin on 28-Авг-07, 10:34
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5 . «Как в Shell прочитать содержимое файла в переменную»
Сообщение от vic (??) on 28-Авг-07, 16:09

>>Data123=`cat /papka1/file`
>>или вот так
>>Data123=$(cat /papka1/file)
>
>Можно еще не подождая лишний процесс:
>read Data123

Неверно, это зачитывание первой строки в переменную.
Задача стоит зачитать весь файл в переменную.

Источник

Как обрабатывать файл построчно в сценарии Linux Bash

Довольно легко прочитать содержимое текстового файла Linux построчно в сценарии оболочки — если вы имеете дело с некоторыми тонкими ошибками. Вот как это сделать безопасным способом.

Файлы, текст и идиомы

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

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

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

Чтение строк из файла: однострочный

В Bash вы можете использовать while цикл в командной строке, чтобы прочитать каждую строку текста из файла и что-то с ней сделать. Наш текстовый файл называется «data.txt». Он содержит список месяцев в году.

Наш простой однострочный текст:

В while Цикл читает строку из файла, и поток выполнения маленькой программы переходит к телу цикла. В echo команда записывает строку текста в окно терминала. Попытка чтения завершается неудачей, когда больше нет строк для чтения, и цикл завершен.

Один из приемов — это возможность перенаправить файл в цикл. В других языках программирования вам нужно будет открыть файл, прочитать из него и снова закрыть, когда вы закончите. С Bash вы можете просто использовать перенаправление файлов и позволить оболочке обрабатывать все эти низкоуровневые вещи за вас.

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

В определенной степени это работает достаточно хорошо. Предположим, у нас есть еще один текстовый файл, содержащий названия месяцев. В этом файле escape-последовательность для символа новой строки добавлена ​​к каждой строке. Назовем его «data2.txt».

Давайте воспользуемся однострочником в нашем новом файле.

Экранирующий символ обратной косой черты » »Был отброшен. В результате к каждой строке добавляется буква «n». Bash интерпретирует обратную косую черту как начало escape-последовательность. Часто мы не хотим, чтобы Bash интерпретировал то, что он читает. Может быть удобнее прочитать строку целиком — escape-последовательности с обратной косой чертой и все такое — и выбрать в собственном коде, что анализировать или заменять самостоятельно.

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

Чтение строк из файла с помощью скрипта

Вот наш сценарий. Он называется «script1.sh».

Мы устанавливаем переменную с именем Counter к нулю, то определяем нашу while петля.

Первый оператор в строке while: IFS=» . IFS обозначает внутренний разделитель полей. Он содержит значения, которые Bash использует для определения границ слов. По умолчанию команда чтения удаляет начальные и конечные пробелы. Если мы хотим читать строки из файла в точности такими, какие они есть, нам нужно установить IFS быть пустой строкой.

Мы могли бы установить это один раз вне цикла, так же, как мы устанавливаем значение Counter . Но с более сложными сценариями, особенно со многими определяемыми пользователем функциями в них, возможно, что IFS могут быть установлены в другие значения в другом месте сценария. Обеспечение того, чтобы IFS устанавливается в пустую строку каждый раз, когда while loop iterates гарантирует, что мы знаем, каким будет его поведение.

Мы собираемся прочитать строку текста в переменной с именем LinefromFile . Мы используем -r (считайте обратную косую черту как обычный символ), чтобы игнорировать обратную косую черту. С ними будут обращаться так же, как с любым другим персонажем, и они не получат никакого специального обращения.

Есть два условия, которые удовлетворяют while цикл и разрешить обработку текста телу цикла:

  • read -r LinefromFile : Когда строка текста успешно считана из файла, read команда отправляет сигнал успеха while , а while loop передает поток выполнения в тело цикла. Обратите внимание, что read команда должна увидеть символ новой строки в конце строки текста, чтобы считать ее прочитанной. Если файл не POSIX совместимый текстовый файл, последняя строка может не включать символ новой строки. Если read команда видит маркер конца файла (EOF) перед тем, как строка будет завершена новой строкой, она будет не рассматривайте это как успешное чтение. Если это произойдет, последняя строка текста не будет передана в тело цикла и не будет обработана.
  • [ -n «$» ] : Нам нужно проделать дополнительную работу для обработки файлов, несовместимых с POSIX. Это сравнение проверяет текст, читаемый из файла. Если оно не завершено символом новой строки, это сравнение все равно вернет успех для while петля. Это гарантирует, что любые фрагменты завершающей строки обрабатываются телом цикла.

Эти два предложения разделяются логическим оператором ИЛИ » || Так что если либо Предложение возвращает успех, полученный текст обрабатывается телом цикла, независимо от того, есть ли символ новой строки или нет.

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

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

Скопируйте и вставьте сценарий в редактор и сохраните его под именем «script1.sh». Использовать chmod команда сделать его исполняемым.

Давайте посмотрим, что делает наш скрипт с текстовым файлом data2.txt и содержащимися в нем обратными косыми чертами.

Каждый символ в строке отображается дословно. Обратные косые черты не интерпретируются как escape-символы. Они печатаются как обычные символы.

Передача строки функции

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

Вот как мы могли это сделать. Это «script2.sh».

Мы определяем наши Counter как и раньше, а затем мы определяем функцию с именем process_line() . Должно появиться определение функции перед функция сначала вызывается в скрипте.

Наша функция будет передавать только что прочитанную строку текста на каждой итерации while петля. Мы можем получить доступ к этому значению в функции, используя $1 переменная. Если бы функции были переданы две переменные, мы могли бы получить доступ к этим значениям, используя $1 и $2 и так далее, чтобы узнать о других переменных.

Ш hile петля в основном такая же. В теле цикла есть только одно изменение. В echo линия заменена вызовом process_line() функция. Обратите внимание, что вам не нужно использовать скобки «()» в имени функции, когда вы ее вызываете.

Имя переменной, содержащей строку текста, LinefromFile , заключен в кавычки при передаче в функцию. Это касается строк, в которых есть пробелы. Без кавычек первое слово рассматривается как $1 по функции второе слово считается $2 , и так далее. Использование кавычек гарантирует, что вся строка текста будет обрабатываться как $1 . Обратите внимание, что это не тоже самое $1 который содержит тот же файл данных, переданный в сценарий.

Потому что Counter был объявлен в основной части скрипта, а не внутри функции, на него можно ссылаться внутри process_line() функция.

Скопируйте или введите приведенный выше сценарий в редактор и сохраните его под именем «script2.sh». Сделайте его исполняемым с помощью chmod :

Теперь мы можем запустить его и передать новый файл данных «data3.txt». В нем есть список месяцев и одна строка со многими словами.

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

Строительные блоки полезны

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

Источник

Работа с файлами и каталогами в командной оболочке Bash

Содержание:

Bash (Bourne Again Shell) — это командная оболочка, использующаяся в таких UNIX-системах, как Linux или MacOS. Она позволяет управлять компонентами ОС с помощью определённых запросов, которые вводятся в консоль или берутся из скрипта.

Как новичкам, так и опытным пользователям будет полезно узнать или вспомнить основные команды Bash для управления такими важными аспектами системы, как файлы и каталоги. Этот вопрос будет разобран на примере ОС Linux.

Работа с файлами и каталогами

Работа с файлами и каталогами в Linux через Bash осуществляется с учетом иерархического принципа их классификации. Иерархическая структура файловой системы Linux напоминает «дерево». Существует корневой каталог, который является начальным для всей ОС, а в нём, соответственно, масса других подкаталогов.

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

Ниже представлен стандартный перечень подкаталогов, встречающийся в большинстве UNIX-систем.

Каталог Содержимое
/bin Бинарные версии файлов (в том числе для командной оболочки).
/dev Псевдофайлы, представляющие собой аппаратные средства, подключённые к устройству.
/etc Большая часть конфигурационных файлов.
/lib Библиотеки для системных приложений.
/opt Необязательные компоненты системы или приложения.
/tmp Временные файлы.
/usr Пользовательские компоненты.
/var Файлы приложений (в том числе системные журналы, кэши и т. д.).

Команды для каталогов

Существуют конкретные команды, предназначенные для работы с каталогами. Далее будут приведены самые важные из них.

Список основных команд

  • pwd — вывод полного пути к текущему каталогу.
  • cd — переход с текущего каталога на домашний пользовательский.
  • cd dirname — перейти в папку «dirname».
  • cd / — переход по директориям относительно корневого каталога.
  • ls — просмотреть список файлов в каталоге.
  • ls -d */ — просмотреть список папок в текущем каталоге.
  • ls dirname — вывод содержимого каталога «dirname» на экран.
  • mkdir dirname — создать папку с наименованием «dirname».
  • rmdir dirname — удалить папку «dirname».
  • rm -rf dirname — удалить папку «dirname» с её содержимым (опция -r) без предупреждения пользователя (опция -f).
  • du -h dirname — размер папки «dirname».

Помимо этого, существуют полезные сокращения. Например, текущая директория обозначается с помощью « . ». Знак « .. » позволяет задействовать родительский каталог. Для представления домашней директории используется «

Пример использования сокращений:

Команды для файлов

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

Список основных команд

  • touchfile — создать файл.
  • realpath file — узнать абсолютный путь к файлу.
  • stat file1 — получение информации о «file1» (размер файла, дата создания файла и т. д.) и проверка существования файла.
  • cat > file — запись в файл.
  • catfile — чтение файла.
  • echo текст >> file — дописать в файл текст.
  • find file — поиск файла.
  • mcedit file — редактирование файла (также можно использовать редакторы Nano, Vim и другие).
  • cat file1 file2 > file12 — объединение файлов.
  • sh filename — запустить файл со сценарием Bash.
  • ./filename — запустить исполняемый файл.
  • cp file1 file2 — копировать файл «file1» с переименованием на «file2». Произойдёт замена файлов, если элемент с таким же названием существует.
  • mv file1 file2 — переименовать файл «file1» в «file2».
  • mv filename dirname — переместить файл «filename» в каталог «dirname».
  • less filename — открыть файл в окне терминала.
  • file filename — определение типа файла.
  • head filename — вывод нескольких начальных строк из файла на экран (построчное чтение файла). По умолчанию строк 10.
  • tail filename — вывод нескольких конечных строк из файла на экран.
  • diff file1 file2 — сравнение файлов.
  • grep text filename — поиск и вывод строк из файла, содержащих «text».
  • rm filename — удалить файл.

Подробную информацию об утилитах можно получить, воспользовавшись справочной службой: « man ».

Пример получения справки по работе с программой rm: « man rm ».

Перенаправление данных

Перенаправление ввода-вывода в файл осуществляется с помощью специальных знаков. Для вывода используются « > » и « >> », а для ввода — « ».

Пример вывода « ls » в файл, а не на экран:

Новый файл создаётся автоматически. В случае существования элемента с таким же наименованием, произойдёт перезапись. Чтобы этого избежать, необходимо использовать « >> ». Тогда данные будут дописываться в документ.

Пример ввода, при котором информация выносится из файла с помощью команды « sort »:

Генерация имён файлов в Bash

Иногда пользователю приходится работать с несколькими файлами одновременно, например, при выполнении переноса документов в другой каталог. Это станет проблемой, если элементов десятки или сотни и среди них нужно отобрать определённые.

Для решения поставленной задачи можно попробовать использование шаблонного выражения, позволяющего Bash определить необходимые элементы, ориентируясь по наименованию. Этот способ упрощает управление группой файлов путём применения короткой формулировки в команде.

Итак, теперь остаётся разобраться с вопросом составления шаблонов. Сейчас будут приведены основные конструкции для осуществления генерации имён. Чаще всего для отбора файлов применяется символ: « * ». В случае использования этого знака в чистом виде, Bash выберет все элементы в каталоге без исключений.

Для примера, чтобы из этого каталога отобрать файлы: file1, file2, file3, следует воспользоваться шаблоном:

Символ звёздочки позволяет командному интерпретатору выделить все файлы, начинающиеся с «file». При этом последующая часть наименования будет проигнорирована.

Знак « * » можно использовать также в начале или с обеих сторон шаблона.

Кроме того, сгенерировать имена можно, взяв за основу расширение файла. Например:

Начни экономить на хостинге сейчас — 14 дней бесплатно!

Источник

Читайте также:  Auslogics windows slimmer pro key
Оцените статью