Регулярные выражения Bash: руководство по созданию, применение, примеры

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

История командного языка

История командного языка

Регулярные выражения Bash разработаны Брайаном Фоксом для проекта GNU как альтернативная смена ПО для оболочки Bourne. Командный язык был издан в 1989 году и массово распространился в качестве оболочки входа по умолчанию для дистрибутивов Linux и MacOS через Apple (прежде OS X). Версия тоже доступна для Windows 10 и является оболочкой пользователя по умолчанию в Solaris 11.

Bash - это инструктивный процессор, традиционно работающий в текстовом терминале, где разработчик запускает команды, вызывающие действия. Регулярные выражения Bash читаются и исполняются из файла, именуемого сценарием оболочки. Вместе с Unix он распознает имена файлов (сравнение подстановочных символов), протоколы, документы, подстановку директив и структуры управления для тестирования критериев. В главных словах синтаксис и другие ключевые индивидуальности языка воспроизводятся из csh и ksh. Bash - это POSIX- совместимая оболочка, но с некоторыми расширениями. Название оболочки - это сокращение от Bourne-again shell.

Брайан Фокс начал кодировать "Баша" 10 января 1988 года после того, как Ричард Столлман был недоволен отсутствием прогресса в разработках бесплатной оболочки, которая могла бы запускать существующие сценарии. Фокс выпустил Bash как бета-версию 8 июня 1989 года и оставался основным разработчиком проекта с середины 1992 года и до середины 1994 года, после чего он был уволен из ФСФ, а его место занял Чет Рами.

В этот период Bash была самой популярной программой среди пользователей Linux, став интерактивной оболочкой по умолчанию в различных дистрибутивах этой операционной системы, а также в MacOS от Apple. Bash также была вкраплена в Microsoft Win с Cygwin, в DOS по DJGPP проекту и Android с помощью различных приложений эмуляции терминала.

В начале сентября 2014 года была обнаружена приличная брешь безопасности в "Баше" версии 1.03, вышедшей в августе 1989 года, получившая название Shellshock, которая привела к целому ряду атак через Интернет. Ошибка считалась серьезной, поскольку скрипты CGI с использованием Bash стали уязвимыми, что позволило выполнять произвольный код. Патчи для исправления ошибок стали доступными сразу же после их обнаружения, но не все компьютеры были обновлены.

Особенности синтаксиса оболочки

Bash является надмножеством команд оболочки Bourne и использует расширение брекетов, завершение командной строки, базовую отладку и обработку исключений с применением ловушки среди других функций. Выполняет подавляющее большинство сценариев оболочки Bourne без изменений, за исключением сценариев, которые по-разному интерпретируются или пытаются запустить системную команду. Регулярные выражения Bash grep, а также инструменты GNU используют сжатый способ сканирования ошибок ПО и устанавливают статус выхода, что позволяет потокам переходить к традиционным пунктам назначения.

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

Регулярные выражения Bash: исполнение цельночисленных расчетов арифметической оценки, употребляется ((...)) команда и $ ((...)) аргумент синтаксиса, упрощающий переадресовывание ввода-вывода. Например, он имеет возможность перенаправлять вывод (stdout) и сбой (stderr) синхронно с поддержкой &>оператора. Настоящее легче ввести, нежели эквивалент оболочки Bourne ' command > file 2>&1'.

Bash использует замещение процесса с поддержкой синтаксиса регулярных выражений "Линукс" и подменяет вывод команды (ввода), традиционно применяющий имя файла. При использовании ключевого слова «функция», объявления Bash несовместимы со сценариями Bourne и Korn, так как оболочка Korn имеет ту же проблему при применении «функции», но она принимает тот же синтаксис объявления функции, что и вышеназванные оболочки, являясь POSIX-совместимой.

Из-за этих и других отличий сценарии редко выполняются под интерпретаторами Bourne и Korn, если они не были специально написаны с учетом этой совместимости, что нужно учитывать при планировании работы с регулярными выражениями Bash. Ассоциативные массивы позволяют поддельную поддержку индексированных массивов, аналогично AWK. Bash 4.x не был интегрирован в новую версию MacOS из-за ограничений лицензии. Пример ассоциативного массива.

Пример ассоциативного массива

Режимы выполнения command

Оболочка имеет два режима исполнения команд: пакетный и параллельный. Команды в пакетном режиме разделены символом «;». Регулярные выражения Bash, пример:

  • command1;
  • command2.

В этом примере, когда команда 1 завершена, выполняется команда 2. И так же можно выполнить фоновое выполнение команды 1 с помощью (symbol &) в конце выполнения, процесс будет выполняться в фоновом режиме, возвращая сразу управление оболочке и позволяя пользователю применять исполняемые команды.

Режимы выполнения command

Для одновременного выполнения команд 1 и 2 они должны быть выполнены в оболочке следующим образом:

  • command1 & command2.

В этом случае команда 1 выполняется в фоновом режиме & symbol, возвращая сразу управление оболочке, которая выполняет команду 2 на переднем плане. Регулярные выражения Bash grep можно остановить и вернуть управление, набрав Ctrl + z, пока процесс выполняется на переднем плане. Список всех процессов, как в фоновом режиме, так и в режиме остановки, может быть, достигнут путем запуска jobs.

Состояние процесса можно изменить с помощью различных команд. Команда "fg" выводит процесс на передний план, а "bg"-набор останавливает процесс, выполняющийся в фоновом режиме. Bg" и "fg" могут принять идентификатор работы в качестве своего первого аргумента, чтобы указать, в каком процессе действовать. Без этого они используют процесс по умолчанию, обозначенный знаком «плюс» в выводе "jobs". Команда "kill" может использоваться для завершения процесса преждевременно, отправив ему сигнал. Идентификатор задания должен быть указан после знака процента:

  • kill -s SIGKILL% 1 или kill -9%.

Bash поставляет «условное исполнение» разделителям команд, которые выполняют команды "contingent" по коду выхода, установленного командой прецедента. Внешняя команда, называемая "bashbug", сообщает об ошибках оболочки. Когда команда вызывается, она запускает редактор по умолчанию для пользователя с заполненной формой. Форма отправляется сторонам Bash или, возможно, другим адресам электронной почты, обеспечив глобально замену регулярных выражений Bash.

Зарезервированные переменные Bash.

Зарезервированные переменные Bash

Скрипты запуска интерактивной среды

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

  • #!/bin/bash.
Скрипты запуска интерактивной среды

Файлы инициализации, применяемые Bash выражения с присвоением не требуют этого. Порядок исполнения файлов:

  1. При запуске оболочки [edit] он читает и исполняет /etc/profile, в случае если он имеется.
  2. Данный файл инициирует /etc/bash.bashrc.
  3. После определения данного файла он отыскивает ~/.bash_profile, считывая и исполняя 1-й, существующий и читаемый.
  4. Если оболочка следует из [edit], он определяет и исполняет ~/.bash_logout.
  5. Во время запуска в роли оболочки [edit] он определяет и исполняет /etc/bash.bashrc, а потом ~/.bashrc.
  6. Настоящее имеет возможность запрещения через "--norc" опцию.
  7. Параметр "--rcfile" file вынуждает Bash прочитывать и исполнять его.
  8. Сопоставление с Bourne shell и csh startup [edit], выходят из оболочки "Борна" и csh. Они разрешают сузить общее использование файлов с Bourne и позволить отдельные функции пуска, известные юзерам csh.

Портативность стандарта POSIX 1003.2

Портативность стандарта POSIX 1003.2

Вызов Bash с –posix опцией или указание set -o posix в скрипте заставляет регулярное выражение для экранирования Bash очень точно соответствовать стандарту POSIX 1003.2. Сценарии оболочки, предназначенные для переносимости, должны по крайней мере учитывать оболочку Bourne, которую она намеревается заменить. У Bash есть определенные функции, которых не хватает традиционной оболочке Bourne. К ним относятся:

  1. Некоторые расширенные варианты вызова.
  2. Подстановка команд с использованием нотации $ (). Эта функция является частью стандарта POSIX 1003.2.
  3. Расширение скобок.
  4. Некоторые операции с массивами и ассоциативные массивы.
  5. Расширение тестовой конструкции с двойными скобками.
  6. Арифметико-оценочная конструкция регулярных выражений Bash в "if".
  7. Некоторые операции манипуляции строкой.
  8. Замена процесса.
  9. Оператор соответствия регулярному выражению.
  10. "Баш"-специфические встроенные Coprocesses.

Арифметические выражения Bash используют "readline" для предоставления быстрых клавиш и редактирования командной строки с использованием привязок клавиш по умолчанию (Emacs). Vi-привязки могут быть включены при запуске "set -o vi".

Расширение брекетов с подстановочными знаками

Расширение брекетов с подстановочными знаками

Подстановка скобок, называемая также чередованием, - это функция, что копируется из оболочки "C". Она генерирует набор альтернативных комбинаций. Сгенерированные результаты не обязательно должны существовать в виде файлов. Результаты каждой расширенной строки не сортируются и сохраняются в порядке справа. Пользователи не должны использовать расширения скобок в переносных сценариях оболочки, потому что оболочка Bourne не производит одинаковый вывод.

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

Когда расширение брекета сочетается с переменным расширением, оно выполняется после расширения брекета, которое в некоторых случаях может потребовать использования "eval" встроенного, таким образом:

  • $ start = 1 ;
  • end = 10 $ echo { $ start .. $ end } # не может расширяться из-за порядка оценки {1..10};
  • $ eval echo { $ start .. $ end } # расширение переменной происходит, тогда результирующая строка оценивается: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

Синтаксические аспекты языка "Баша"

Синтаксические аспекты языка Баша

Сценарии оболочки должны храниться в текстовом файле ASCII, созданном с использованием программы «editor», которая не вводит дополнительные символы или последовательности для форматирования текста. Например, редакторы, подходящие для создания сценариев оболочки, - это программы vi или Emacs, доступные в UNIX / Linux, или такие программы, как «Блокнот», TextEdit и UltraEdit в Microsoft Windows.

Хорошей практикой является вставка в первую строку каждого сценария Bash регулярки, последовательности «#! / Bin / bash», которая показывает абсолютный путь программы в файловой системе машины, на которой нужно запустить скрипт. Таким образом, можно запустить его непосредственно в командной строке, не указывая имя файла в качестве аргумента команды «bash».

Указание программы-переводчика, которая будет использоваться операционной системой для перевода и выполнения инструкций скрипта, предоставляется в первой строке самого скрипта, сразу после последовательности символов «#!». Считается, что исполняемый файл интерпретатора находится в каталоге « / bin», но в разных системах он может быть установлен в других каталогах, например:

  • « / usr / bin », « / usr / local / bin ».

В общем случае символ «#» позволяет вводить комментарий в источнике сценария. Любой символ в строке сценария после символа «#» игнорируется командным интерпретатором. Фактически он часто используется для вставки комментариев в источник сценария для описания его работы или для объяснения влияния конкретных команд. Как и при вставке команд в интерактивном режиме, даже при кодировании скрипта, каждая инструкция программы может быть записана на отдельной строке или разбита на несколько строк и заканчивает каждую строку, кроме последней, символом « \ ». Дополнительные инструкции можно сообщать в той же строке, используя «;».

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

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

Интерактивный запуск

Интерактивный запуск

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

Сценарий запускается автоматически операционной системой, когда пользователь входит в саму систему, то есть может быть выполнен пользователем посредством команды, заданной на уже открытой оболочке, или с помощью специальных графических утилит, если он работает с системой с графическим интерфейсом пользователя. Например, на компьютере Apple Macintosh под управлением Mac OS X можно использовать командную оболочку, запустив утилиту Terminal, расположенную в Utility в папке «Приложение».

На рабочей станции Linux с графическим менеджером рабочего стола, например GNOME или KDE, можно открыть командную оболочку, выбрав программу «Терминал» из меню «Приложения → Аксессуары». После активации командной оболочки можно просмотреть имя используемой нами оболочки, выполнив следующие команды:

  • $ echo;
  • $SHELL /bin/bash.

Если оболочка по умолчанию не является Bash, можно проверить, присутствует ли она в системе в одном из каталогов, перечисленных в переменной среды PATH, используя команду «which», и выполнить ее с помощью команды «bash»:

  • $ echo $SHELL /bin/tcsh $ which bash /bin/bash $ bash bash-2.03$.

Оболочка, таким образом, работает в интерактивном режиме, получая входные данные в каждую отдельную команду и параметры, указанные в командной строке, и выполняя саму команду. Вывод отображается в том же окне терминала. Каждая команда, передаваемая оболочке, заканчивается нажатием клавиши Invio/Enter. Можно выпустить несколько команд в одной строке, отделяя их друг от друга символом «;». Также возможно разбить вставку команды на две или более строк, заканчивая каждую промежуточную строку символом « \ ».

Апики, двойные и обратные кавычки

Апики, двойные и обратные кавычки

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

Одиночные кавычки используются для разграничения строк символов. Интерпретатор не входит в содержимое строки и просто использует последовательность символов, разделенных кавычками. Таким образом, символы, которые иначе принимают другое значение, также могут быть частью строки. Единственный символ, который не может использоваться в строке, ограниченной кавычками, - это те же самые кавычки. Для определения такой строки необходимо разграничить ее кавычками.

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

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

Примеры команд

Примеры команд

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

  • $ pwd ;
  • echo $SHELL ;
  • hostaname /home/marco /bin/bash aquilante $ echo \ > $SHELL /bin/bash.

Если нужно подготовить файл под названием «script.sh », который хранится в домашнем каталоге, содержимое файла может быть следующим:

  • echo -n "Oggi e' il " 2 date +%d/%m/%Y.

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

  • $ bash script.sh Oggi e' il 10/6/2011.

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

  • $ cat script.sh | bash Oggi e' il 10/6/2011.

Можно выделить строку регулярных выражений Bash-программы с обозначением «#!». Абсолютный путь интерпретатора, который будет использоваться для выполнения скрипта, запускают напрямую без ОС, запустив Bash и передав скрипт во вход:

  • $ cat script.sh #!/bin/bash echo -n "Oggi e' il " date +%d/%m/%Y $ chmod 755 script.sh $ ls -l script.sh -rwxr-xr-x 1 marco users 49 18 Apr 23:58 script.sh $ ./script.sh Oggi e' il 10/6/2011.

В последней команде предыдущего примера, непосредственно вызывающей выполнение скрипта, хранящегося в файле «script.sh», присутствующем в текущем каталоге, указан относительный путь « ./ » до имени файла. Необходимо указать путь к каталогу, в котором находится исполняемый скрипт, потому что часто по соображениям безопасности текущий каталог отсутствует в списке каталогов, в которых оболочка должна искать внешние исполняемые команды. Список таких каталогов хранится в переменных регулярных выражениях Bash.

Преимущества операционной системы с Bash

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

Если сравнить скрипты с изучением конфигурации или системы автоматизации "yaml" или "json", они намного более универсальны. Сценарии Bash более просты, потому что скрипт работает по умолчанию.

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

С помощью Bash разработчики могут использовать интерактивный веб-опыт, применяя опыт командной строки Linux без границ времени и места. Для использования этой возможности не требуются строгие правила и усилия, и пользователи могут получить доступ к аутентифицированной рабочей станции, управляя ресурсами и средой Azure одним кликом, даже когда они используют мобильные приложения Azure, Azure Portal и Azure Documentation.

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

Мы рассмотрели примеры регулярных выражений Bash. Удачи в освоении!

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.