Новини високих технологій
» » Bash Scripting: керівництво по створенню

Bash Scripting: керівництво по створенню

12-11-2018, 11:32
724
Сценарії Bash scripting використовуються системними адміністраторами, програмістами, мережевими інженерами, науковцями і практично усіма, хто регулярно використовує систему Linux/Unix. Незалежно від того, що користувач робить та який його загальний рівень майстерності володіння комп'ютером, він може знайти підходящий для себе спосіб використовувати Bash scripting. Хоча правильно, вони називаються shell-скриптами, але більшість програмістів іменують їх сценаріїв Bash. В якості інтерактивної оболонки - це короткий мова для ініціювання та управління обчисленнями. В якості мови сценаріїв він є мовою, специфічним для домену, для управління і компонування процесів і файлів.

Визначення сценарію Bash

Bash scripting - інтерпретатор командного мови. Він широкодоступен в різних операційних системах і є аналізатором команд за замовчуванням для більшості систем GNU/Linux. Це абревіатура «Bourne Again SHell».


Інші визначення: Shell - це макропорцесори, який дозволяє виконувати інтерактивне або не інтерактивне виконання команди. Scripting дозволяє настроїти автоматичне виконання команд, які в іншому випадку діяли б інтерактивно один за іншим. Bash scripting встановлений за умовчанням в багатьох системах GNU/Linux, тому сценарій оболонки працює навіть без визначення його в якості інтерпретатора. Щоб дізнатися, що виконує команда за замовчуванням, прописують: $ echo $SHELL /bin/bash. Існують і інші інтерпретації оболонки, такі як Korn, C і багато інших. З цієї причини рекомендується визначити інтерпретатор оболонки, який буде використовуватися конкретно для вмісту скрипта.


Тепер всі скрипти будуть включати визначення інтерпретатора оболонки: #!/bin/bash. Більш конкретно про це написано в спеціальній літературі Advanced Bash scripting guide.

Імена файлів і дозволу

Для виконання сценарію оболонки файл повинен бути виконуваним, виконаним за допомогою «chmod +x FILENAME» команди. За промовчанням будь-які новостворені файли не виконуються незалежно від суфікса розширення файлу. Насправді, останнім властивість в системах GNU/Linux в основному не має ніякого значення. При виконанні «ls» команди для перерахування всіх файлів і каталогів відразу стає ясно, що файл з розширенням «.sh» є правдоподібним сценарієм оболонки, а з «.jpg» буде стиснутим зображенням. Більш детально про розширення файлів цієї мови можна ознайомитися в підручниках Advanced Bash scripting guide. У системах GNU/Linux file команда може використовуватися для ідентифікації типу файлу. Як видно з наведеного нижче прикладу, розширення файла не має ніякого значення, а інтерпретатор оболонки в цьому випадку має більшу вагу.
Таким чином, ім'я сценарію оболонки «0_xyz» відмінно діє, хоча програмісти по можливості намагаються його уникати.

Команда оболонки PATH

Коли розробник вводить команду в оболонку Bash дивиться в певні каталоги, щоб дізнатися, чи може він знайти її. Тому, згідно Bash scripting guide, якщо набирають «ls» в оболонці, він виконає тільки команду, якщо вона знаходиться на його шляху. Операція завершиться помилкою, якщо її не буде в одному з каталогів, які є частиною маршруту. Якщо є збіг у більш ніж в одному з каталогів на шляху, він вибирає перший. Можна дізнатися маршрут, запустивши:
echo $ PATH. На екрані монітора з'явитися щось на зразок цього: /home/jzb/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/jvm/jre/bin.

Правильний шлях домашнього каталогу

Кожен каталог, в якому виглядає Bash, поділяється двокрапкою. При цьому, перший з них буде перевірятися каталог «bin», а потім /usr /local /bin, /usr /bin. Якщо користувач увійшов в систему як root, він повинен побачити інший набір каталогів, включаючи /usr /local /sbin, /usr /sbin. Можна додати їх у рух або змінити, відредагувавши файли: ~ /.bashrc та ~ /.bash_profile. Наприклад: PATH="$HOME/bin:$PATH" . Можна трохи змінити це правило і встановити advanced Bash scripting. PATH "=" повідомить Bash, що він буде встановлювати шлях, а «$ HOME /bin» пропонує йому додати каталог bin, а після «$ PATH» рекомендує йому додати все, що вже знаходиться на маршруті. Параметр «:» - роздільник між елементами. Розробник побачить на екрані свого монітора щось на зразок цього: if[-d "$HOME/bin" ]; then PATH="$HOME/bin:$PATH" fi. Це правило перевірить, чи існує каталог «bin» у домашньому каталозі, а потім додасть його в шлях, щоб далі правильно виконати операцію «run Bash script».

Рядковий псевдонім

Псевдонім - це рядок, в якій Bash буде замінятися іншою командою. Простий приклад: alias ls = 'ls --color = auto'. Це говорить йому, що, коли запускають «ls», потрібно запустити «ls --color = auto», без набору всього іншого. Можна встановити псевдоніми в командному рядку, і це добре для тестування.
При цьому має сенс встановити псевдоніми в «~ /.bash_profile та ~ /.bashrc». Або створити щось на зразок «~ /.aliases» і викликати це з файлів конфігурації наступним чином: if[-f ~/.bash_aliases ]; then . ~/.bash_aliases fi Щоб побачити вже наявні псевдоніми, просто запускають його в оболонці. Він значиться за замовчуванням в дистрибутиві. Ось, наприклад, набір за умовчанням, встановлений на openSUSE 11.2 без будь-яких змін.
В якості тесту, можна побачити, що вже встановлено дистрибутивом і спробувати скласти кілька власних варіантів.

Розширення оболонки

Перш ніж Bash виконає команду, він оцінює enter і «розширює» псевдоніми та інші вирази завжди, коли це необхідно. У нього є кілька символів, які він обов'язково розширює, щоб відповідати одному або декільком символам, і вони називаються «символ узагальнення». Таке зіставлення моделей може бути дійсно корисним. Наприклад, якщо потрібно бачити всі JPEG-файли в каталозі, запускають «ls * jpg», за умови, що файли JPEG позначені як «jpg», і Bash розширить це, щоб відповідати будь-якого імені файлу, яке закінчується jpg.

Якщо потрібно поєднати тільки 1 символ, використовують «?». Це буде вказувати на один знак, тому «ls? .Jpg» буде відповідати тільки іменами файлів, наприклад, «1.jpg» або «a.jpg», а не «01.jpg». Bash також дозволяє зіставляти діапазони символів за допомогою дужок. Використання[abc12]буде відповідати одному із символів при розширенні. Так, працюючи «ls -lh[abc12].jpg», буде співвідноситися з a.jpg, b.jpg, c.jpg, 1.jpg і 2.jpg, але не 12.jpg або abc.jpg. Можна звести нанівець шаблон шляхом префікса «bang» (!), Наприклад: ls -lh[! Ab12].jpg буде відповідати c.jpg або 3.jpg, але не 2.jpg і т. д. Ще один зручний трюк - розширення брекета, коли потрібно організовувати документи по роках і датам. Якщо, наприклад, в папці ~ /Documents є каталог 2010 з підкаталогами з 01 по 12 і не потрібно друкувати з 01 по 12 роблять Bash замість цього: mkdir 2010 /{0112}. Коли він читає правило, він розширює те, що знаходиться в фігурних дужках, з 01 по 12. Це також працює з літерами, тому, якщо потрібні підкаталоги через z, можна запустити mkdir {az} і він створить каталоги через z. Може також працювати з великими літерами.

Виконання сценарію

Існує альтернативний спосіб запуску сценаріїв Bash. У дуже спрощеному уявленні його сценарій - це не що інше, як текстовий файл, що містить інструкції, які повинні виконуватися послідовно зверху вниз. Те, як інтерпретуються інструкції, залежить від певного shebang або способу виконання скрипта.
Інший метод здійснення сценаріїв - це явно викликати його інтерпретатор, наприклад, $ bash date.sh. Отже, буде виконуватися сценарій без необхідності запуску скрипта оболонки і без оголошення shebang, безпосередньо в схемі операційної системи, викликаючи виконуваний двійковий файл bash. Таким чином, вміст файлу date.sh буде завантажуватися і інтерпретуватися, як Bash Shell Script.

Відносний і абсолютний шлях

Перед тим, як запрограмувати офіційний сценарій оболонки, наприклад, exit Bash script, потрібно визначити навігацію з нею і встановити різницю між відносним і абсолютним шляхом до файлу. Ймовірно, найкраща аналогія, пояснює відносний і абсолютний шлях до файла – це візуалізувати файлову систему GNU/Linux, як багатоповерховий будинок. Кореневий каталог - вхідні двері будівлі, позначена позицією, він забезпечує вхід у всю файлову систему «будови», отже, дає доступ до всіх каталогів - «поверхах» і «кімнатам» - і файлів - «мешканцям». Щоб, наприклад, перейти в кімнату 1 на 3 поверсі, спочатку потрібно увійти в головну двері, а потім перейти на 3 поверх (level3)і звідти увійти у кімнату (room1). Отже, абсолютний шлях до цієї конкретної кімнаті на поверсі всередині будівлі «/level3/room1». Звідси, якщо потрібно відвідати room2 також на рівні 3 спочатку фіксують поточне місце розташування, яке є кімнатою 1 ввівши, «/», а потім, включивши ім'я кімнати «room2». При цьому приймається відносний шлях в кімнату 2 який в цьому випадку «/room2». Оскільки в даному прикладі користувач вже був на третьому рівні, йому не потрібно залишати все будівля і заново проходити абсолютний шлях через головний вхід /level3/room2. На щастя, GNU/Linux має простий інструмент компаса, який допоможе програмісту переміщатися по всієї файлової системи у вигляді «pwd» команди. Ця команда при виконанні завжди буде друкувати поточне місце розташування. Наступний приклад буде використовувати «cd» і «pwd» команду для навігації по файловій системі GNU/Linux з використанням абсолютних і відносних шляхів.
Далі продовження.
Виконують «cd» команду без будь-яких аргументів, щоб миттєво перейти у домашній каталог користувача з будь-якого місця. Як видно, навігація через файлову систему GNU/Linux - це і просте, і в той же час дуже заплутана тема.

Поняття змінних

Майже кожна мова програмування має поняття змінних - символічне ім'я для частини пам'яті, яку можна призначати значення, читати і маніпулювати його вмістом. Наприклад, для Bash script example, «Hello World» можна виконати за допомогою змінних. Звертають увагу, що не повинно бути пробілів навколо знака «=»: VAR=value працює; VAR = value не працює. У першому випадку оболонка бачить символ «=» і обробляє команду як призначення змінної. У другому випадку оболонка припускає, що VAR повинен бути ім'ям команди і намагається її виконати. Вводять наступний код в var.sh.
Це привласнює змінної «Hello World» змінну MY_MESSAGE. При цьому потрібні лапки навколо рядка Hello World, а змінна може містити тільки 1 значення, тому рядок з пробілами повинна бути приведена так, щоб оболонка знала, що все це розглядається як одне. В іншому випадку оболонка спробує виконати команду «World» після призначення «MY_MESSAGE=Hello». Оболонка не вимоглива до типів змінних, вони можуть зберігати рядки, цілі числа, дійсні числа - все, що подобається користувачеві. Досвідчені програмісти звертають увагу на те, що спеціальні символи повинні бути правильно екрановані. Для цього використовується команда «shell-builtin, read», яка зчитує рядок зі стандартного вводу в постачається змінну. Якщо і дати йому повне ім'я і не використовувати подвійні лапки «echo» команди, воно все одно виводиться правильно. Більшість мов мають концепцію циклів, якщо потрібно повторити завдання двадцять разів, навряд чи користувач захоче вводити код 20 разів, та ще, напевно, з помилками. Для цього існують «for» та «while» петлі у оболонці Борна. Це дає дещо менше можливостей, ніж інші мови, але ніхто і не стверджує, що програмування оболонки має силу C. For-цикл повторюється через набір значень до тих пір, поки список не буде вичерпаний, ghb 'njv значення можуть бути будь-якими.

Перший скрипт

Для першого сценарію оболонки можна просто написати сценарій, який говорить «Hello World». Створюють файл (first.sh) наступним чином: first.sh Перший рядок повідомляє Unix, що файл повинен бути запущений /bin /sh. Це стандартне розташування оболонки практично для кожної системи Unix. Якщо використовується Linux Bash script, тоді GNU/Linux /bin /sh, зазвичай, є символічним посиланням на bash, або зовсім недавно стало застосовуватися тире. Другий рядок починається зі спеціальним символом « #». Це відзначає рядок, як коментар, вона повністю ігнорується оболонкою. Єдине виключення - коли починається перший рядок файлу « #!». Це спеціальна директива, яку Unix розглядає особливо і означає, що навіть якщо використовують «csh», «ksh» або щось ще в якості інтерактивної оболонки, то подальше інтерпретуватися Bourne. Аналогічно, Perl може починатися рядком: #!/usr/bin/perl Це повідомить інтерактивній оболонці, що наступна команда повинна виконуватися perl. Для програмування оболонки Bourne зазвичай дотримуються: #!/bin/sh. Третій рядок виконує команду «echo» з двома параметрами або аргументами: перша - "Hello"; друга - це "World". Звертають увагу, що «echo» автоматично буде встановлювати один простір між його параметрами. Символ досі зазначає коментар «#», а всі наступні за нею ігноруються оболонкою.

Тест для перевірки сценарію

Тест використовується практично для кожного написаного сценарію оболонки. При цьому «test» не називається так прямо, частіше застосовують позначення «[». Он является символической ссылкой этого слова, чтобы сделать программы оболочки более читаемыми.Обычно это означает, что сама оболочка Bash shell script будет интерпретироваться «[», как значение «test», даже если среда Unix настроена по-разному. Это означает, что «[» на самом деле это программа, как «ls» и другие, поэтому она должна быть окружена пробелами: if[$ foo = "bar"]не буде працювати, так як це інтерпретується як: if test$foo = "bar" ], що є «]» без початку «[».В этом случае помещают пробелы вокруг всех операторов и выделяют обязательные словом «SPACE», заменяя его на фактическое пространство, иначе, если там нет места, это не сработает:if SPACE[SPACE "$ foo" SPACE = SPACE "bar" SPACE] Деякі оболонки приймають «==» для порівняння рядків. Для останніх краще використовувати одиночний « » або «-eq» для цілих чисел. Як видно, тест - проста, але потужна утиліта порівняння, яка необхідна для роботи в оболонці. Звичайно, всі не стануть гуру-Bash наприкінці прочитання статті, але будуть більш впевнені і озброєні необхідними знаннями і навичками, щоб з легкістю виконувати свою роботу.
Цікаво по темі
Основні команди Ubuntu: створення, переміщення і видалення
Основні команди Ubuntu: створення, переміщення і видалення
Ubuntu - одна з самих настроюються операційних систем. Щоб розуміти різні складності системи, необхідно ознайомитися з самими повсякденними
Пошук по вмісту файлів в Linux: можливі варіанти вирішення проблеми
Пошук по вмісту файлів в Linux: можливі варіанти вирішення проблеми
У кожної операційної системи є свої плюси і мінуси, які проявляються при роботі. Те ж стосується і Linux. У багатьох користувачів регулярно виникають
Як використовувати Putty: команди і корисні функції
Як використовувати Putty: команди і корисні функції
У цьому матеріалі ми познайомимося з PuTTY, безкоштовним клієнтом терміналу для Windows, який дозволяє віддалено керувати серверами на базі Linux по
Як вивести в Linux список користувачів?
Як вивести в Linux список користувачів?
За допомогою якої команди можна переглянути в Linux список користувачів? Як розшифрувати отримані записи і зрозуміти, що написано на екрані?