Новини високих технологій
» » Регулярні вирази Bash: керівництво по створенню, застосування, приклади

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

9-12-2018, 18:44
350
Регулярні вирази 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 року була виявлена пристойна пролом безпеки в "Баше" версії 103 що вийшла в серпні 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 &) наприкінці виконання, процес буде виконуватися у фоновому режимі, повертаючи відразу управління оболонці і дозволяючи користувачеві застосовувати виконувані команди.
Для одночасного виконання команд 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 починає функціонувати, він виконує різні точкові файли. Навіть за подібним командам сценаріїв, які мають дозвіл на виконання розпорядження інтерпретатора, наприклад: #!/bin/bash.
Файли ініціалізації, застосовуються Bash вирази з присвоєнням не вимагають цього. Порядок виконання файлів: При запуску оболонки[edit]він читає і виконує /etc/profile, у разі якщо він є. Даний файл ініціює /etc/bash.bashrc. Після визначення даного файлу він відшукує ~/.bash_profile, зчитуючи і виконуючи 1-й, існуючий і читається. Якщо оболонка випливає з[edit]він визначає і виконує ~/.bash_logout. Під час запуску в ролі оболонки[edit]він визначає і виконує /etc/bash.bashrc, а потім ~/.bashrc. Даний має можливість заборони через "--norc" опцію. Параметр "--rcfile" file змушує Bash прочитувати і виконувати його. Зіставлення з Bourne shell і csh startup[edit], виходять з оболонки "Борна" і csh. Вони дозволяють звузити спільне використання файлів з Bourne і дозволити окремі функції пуску, відомі юзерам csh.

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

Виклик Bash з –posix опцією або вказівку set -o posix в скрипті змушує регулярний вираз для екранування Bash дуже точно відповідати стандарту POSIX 1003.2. Сценарії оболонки, призначені для переносимості, повинні принаймні враховувати оболонку Bourne, яку вона має намір замінити. У Bash є певні функції, яких не вистачає традиційної оболонці Bourne. До них відносяться:
Деякі розширені варіанти виклику. Підстановка команд з використанням нотації $ (). Ця функція є частиною стандарту POSIX 1003.2. Розширення дужок. Деякі операції з масивами та асоціативні масиви. Розширення тестовій конструкції з двома дужками. Арифметико-оціночна конструкція регулярних виразів Bash в "if". Деякі операції маніпуляції рядком. Заміна процесу. Оператор відповідності регулярному виразу. "Баш"-специфічні вбудовані Coprocesses. Арифметичні вирази Bash використовують "readline" для надання швидких клавіш і редагування командного рядка з використанням прив'язок клавіш за замовчуванням (Emacs). Vi-прив'язки можуть бути включені при запуску "set -o vi".

Розширення брекетів з підстановки

Підстановка дужок, звана також чергуванням, - це функція, що копіюється з оболонки "C". Вона генерує набір альтернативних комбінацій. Згенеровані результати не обов'язково повинні існувати у вигляді файлів. Результати кожної розширеної рядки сортуються і зберігаються в порядку праворуч. Користувачі не повинні використовувати розширення дужок у переносних сценаріях оболонки, тому що оболонка Bourne не виробляє однаковий висновок. Коли розширення дужки поєднується з символи знаками, дужки спочатку розширюються, а потім одержувані знаки символи замінюються. На додаток до чергування розширення брекета може використовуватися для послідовних діапазонів між двома цілими числами або символами, розділеними подвійними точками. Більш нові версії використання регулярних виразів Bash дозволяють третій цілому числу вказати прирощення. Коли розширення брекета поєднується з перемінним розширенням, воно виконується після розширення брекета, яке в деяких випадках може вимагати використання "eval" вбудованого, таким чином: $ start = 1 ; end = 10 $ echo {$ start $ end} # не може розширюватися за порядку оцінки {110}; $ eval echo {$ start $ end} # розширення змінної відбувається, тоді результуюча рядок оцінюється: 123 456 789 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-203$. Оболонка, таким чином, працює в інтерактивному режимі, отримуючи вхідні дані в кожну окрему команду і параметри, зазначені в командному рядку, та виконуючи саму команду. Висновок відображається в тому ж вікні терміналу. Кожна команда, яка передається оболонці, закінчується натисканням клавіші 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 4918 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. Удачі в освоєнні!
Цікаво по темі
Команди Unix: перелік, особливості використання, частота застосування
Команди Unix: перелік, особливості використання, частота застосування
Користувачам не варто турбуватися, якщо команди Unix спочатку здаються заклинаннями або таємничими елементами, а вся система UNIX недоступною.
Bash Scripting: керівництво по створенню
Bash Scripting: керівництво по створенню
Ця стаття призначена для того, щоб дати користувачам основу для написання сценаріїв Bash, щоб комп'ютер міг виконувати складні, повторювані завдання
Регулярні вирази Notepad: опис, заміна та приклади
Регулярні вирази Notepad: опис, заміна та приклади
Регулярний вираз Notepad - теорія формальної мови, послідовність символів, що визначають шаблон пошуку. Зазвичай цей шаблон потім використовується
Як вивести в Linux список користувачів?
Як вивести в Linux список користувачів?
За допомогою якої команди можна переглянути в Linux список користувачів? Як розшифрувати отримані записи і зрозуміти, що написано на екрані?