logo

Bash Scripting – Вступ до Bash і Bash Scripting

Bash — це інтерпретатор командного рядка або Unix Shell, який широко використовується в операційній системі GNU/Linux. Автор: Браян Джан Фокс. Він використовується як оболонка входу за замовчуванням для більшості дистрибутивів Linux. Сценарії використовуються для автоматизації виконання завдань, щоб людям не потрібно було виконувати їх окремо. Сценарії Bash — чудовий спосіб автоматизувати різні типи завдань у системі. Розробники можуть уникнути виконання повторюваних завдань за допомогою сценаріїв bash.

Сценарії Bash підтримують змінні, умовні оператори та цикли, як і мови програмування. Нижче наведено деякі з програм Bash Scripts –

Зміст



Застосування сценаріїв Bash:

  • Маніпулювання файлами
  • Виконання рутинних завдань, таких як операція резервного копіювання
  • автоматизація

Переваги використання сценаріїв Bash наведені нижче:

Переваги сценаріїв Bash:

  • Це просто.
  • Це допомагає уникнути виконання повторюваних завдань
  • Простий у використанні
  • Часто виконувані завдання можна автоматизувати
  • Послідовність команд можна виконувати як одну команду.

Недоліки сценаріїв Bash наведені нижче:

Недоліки сценаріїв Bash:

  • Будь-яка помилка під час написання може дорого коштувати.
  • Майже для кожної виконаної команди оболонки запускається новий процес
  • Повільна швидкість виконання
  • Проблеми сумісності між різними платформами

Як писати сценарії Bash?

Щоб написати сценарій Bash, ми виконаємо наступні кроки:

  • Спочатку ми створимо файл із розширенням .sh.
  • Далі ми запишемо в ньому сценарії bash
  • Після цього ми надамо дозвіл на його виконання.

Для створення та запису файлу з розширенням .sh ми можемо використовувати gedit текстовий редактор. Команда для нього буде –

123 фільм
gedit scriptname.sh>

Перший рядок нашого файлу сценарію буде –

#!/bin/bash>

Це підкаже системі використовувати Bash для виконання. Тоді ми зможемо написати власні сценарії.

Давайте запишемо простий сценарій, який друкуватиме кілька рядків у терміналі. Код для нього буде –

#!/bin/bash echo 'Hello, techcodeview.com'>

Тепер ми збережемо файл і надамо йому дозвіл на виконання. Для цього скористайтеся такою командою –

chmod +x scriptname.sh>

Далі для виконання наступного сценарію ми використаємо таку команду –

./scriptname.sh>

Ось графічне зображення оболонки терміналу після виконання наведених вище команд:

Тут ім’я файлу сценарію – gfg.sh.

Тепер ми також можемо писати складніші команди за допомогою сценаріїв Bash. Нижче наведено приклад, у якому ми використовуємо оператор умови –

Приклад сценарію:

#!/bin/bash Age=17 if [ '$Age' -ge 18 ]; then echo 'You can vote' else echo 'You cannot vote' fi>

Вихід:

You cannot vote>

Ось графічне зображення оболонки терміналу після виконання наведеного вище сценарію:

Таким чином, ми можемо виконати кілька команд Bash одночасно.

Тепер давайте розглянемо інші важливі поняття, пов’язані зі сценарієм Bash.

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

У наведеному вище прикладі ми зберегли файл за допомогою gfg.sh ім'я, а також надано дозвіл на виконання за допомогою chmod команда. Тепер давайте зрозуміємо, чому ми це зробили.

Під час написання сценаріїв bash ми повинні зберегти наш файл із розширенням .sh, щоб система Linux могла його виконати. Коли ми вперше створюємо файл із розширенням .sh, він не має жодного дозволу на виконання, а без дозволу на виконання сценарій не працюватиме. Отже, ми повинні надати йому дозвіл на виконання за допомогою chmod команда.

Ім’я файлу сценарію bash може бути будь-яким, але за угодою рекомендується використовувати регістр ( my_bash_script.sh ) або дефіси ( my-bash-script.sh ) для іменування файлу сценарію.

Змінні

Ми можемо використовувати змінні в сценаріях bash. Нижче наведено зразок програми для розуміння використання змінних у сценаріях Bash.

Приклад сценарію:

Name='SATYAJIT GHOSH' Age=20 echo 'The name is $Name and Age is $Age'>

Вихід змінних:

The name is SATYAJIT GHOSH and Age is 20>

Отже, тут оголошено дві змінні Ім'я і ще один є Вік Ці змінні доступні за допомогою $Name і $Age. Це означає, що ми можемо оголосити змінну в сценарії bash за допомогою VariableName=Значення і може отримати до нього доступ за допомогою $VariableName. Ось графічне зображення оболонки терміналу після виконання наведеного вище сценарію:

У сценаріях Bash є два типи змінних. Традиційно, якщо змінну оголошено всередині функції, то це, як правило, a локальна змінна і якщо він оголошений зовні, то це a глобальна змінна . У випадку сценарію bash ця концепція дещо інша, тут будь-яка змінна, незалежно від того, записана вона всередині функції чи поза нею за замовчуванням, є глобальною змінною. Якщо ми хочемо створити локальну змінну, нам потрібно використати ключове слово local.

Примітка: Найкраще завжди використовувати локальну змінну всередині функції, щоб уникнути непотрібної плутанини.

Приклад того ж наведено нижче –

Приклад сценарію:

#!/bin/bash var1='Apple' #global variable myfun(){ local var2='Banana' #local variable var3='Cherry' #global variable echo 'The name of first fruit is $var1' echo 'The name of second fruit is $var2' } myfun #calling function echo 'The name of first fruit is $var1' #trying to access local variable echo 'The name of second fruit is $var2' echo 'The name of third fruit is $var3'>

Вихід локальних і глобальних змінних:

The name of first fruit is Apple The name of second fruit is Banana The name of first fruit is Apple The name of second fruit is The name of third fruit is Cherry>

Тут, у наведеному вище прикладі, var2 є локальною змінною, тому, коли ми звертаємося до неї з функції, вона працює добре, але коли ми намагаємося отримати доступ до неї поза функцією, це дає нам порожній результат у виводі.

З іншого боку, на відміну від мов програмування, незважаючи на те, що var3 визначено всередині функції, вона все одно діє як глобальна змінна, і до неї можна отримати доступ поза функцією. Нижче наведено зображення оболонки терміналу після виконання сценарію –

Вхід і вихід

Вхід і вихід є фундаментальними поняттями для сценаріїв оболонки. Сценарій може приймати один або кілька вхідних даних, а також може створювати нуль або багато виходів. Це може навіть викликати деякі помилки. Зрозуміємо це на прикладі –

Приклад сценарію:

echo 'Enter filename' read filename if [ -e $filename ] then echo '$filename is exits on the directory' cat $filename else cat>$filename echo 'Файл створено' fi>

Вихід введення та виведення:

Перший раз:

Enter filename geeks.txt Hello Geek File created>

Другий раз:

Enter filename geeks.txt geeks.txt is exits on the directory Hello Geek>

Отже, у наведеному вище прикладі вперше сценарій не зміг знайти жодного файлу з такою назвою файлу, і блок else виконується. Він створив файл і помістив деякі дані в цей файл. Коли ми запускаємо його вдруге з тим же іменем файлу, він знаходить файл. Отже, чи виконується блок if, який відображає вміст файлу. Читання вмісту файлу є вхідним, а перше введення даних у файл вважається вихідним. Ось ми використали > для зберігання вмісту у файлі. The > нотація використовується для перенаправлення stdout до файлу. З іншого боку, ми можемо використовувати 2> нотація для перенаправлення stderr і &> щоб переспрямувати як стандартний вивід, так і стандартний вихідний файл.

Нижче наведено графічне зображення оболонки терміналу після виконання наступного сценарію –

Функції

У програмуванні функція — це блок коду, який виконує деякі завдання, і її можна викликати кілька разів для виконання завдань. Найпростіший приклад використання функції в сценаріях Bash можна навести так:

Приклад сценарію:

#!/bin/bash #It is a function myFunction () { echo Hello World from techcodeview.com } #function call myFunction>

Вихід функцій:

Hello World from techcodeview.com>

Наведений вище приклад показує функцію, яка друкує щось під час виклику.

Отже, основний синтаксис для написання функцій у скрипті Bash буде таким:

Синтаксис функцій:

#for defining function_name(){ commands ..... } function_name # for calling>

Окрім цього, ми також можемо мати функції з передачею аргументів і значеннями, що повертаються.

Прийняття рішень

У програмуванні прийняття рішень є одним із важливих понять. Програміст забезпечує одну або кілька умов для виконання блоку коду. Якщо умови задовольняються, цей блок кодів лише виконується.

У сценаріях оболонки використовуються два типи операторів прийняття рішень. Вони є -

1. Оператор If-else:

Оператор If else є умовним оператором. Його можна використовувати для виконання двох різних кодів залежно від того, задовольняється дана умова чи ні.

У операторі if-else є кілька різновидів. Вони є -

  • якщо-фі
  • якщо-інакше-фі
  • if-elif-else-fi
  • вкладений if-else

Синтаксис найпростішого буде таким:

Синтаксис оператора If-else:

if [ expression ]; then statements fi>

Приклад сценарію:

Name='Satyajit' if [ '$Name' = 'Satyajit' ]; then echo 'His name is Satyajit. It is true.' fi>

Вихід оператора if-else:

His name is Satyajit. It is true.>

У наведеному вище прикладі під час перевірки умови ім’я збігається, і умова стає істинною. Отже, виконується блок коду, присутній у блоці if. Якщо ім’я не збігається, результату не буде. Нижче наведено графічне зображення оболонки терміналу після виконання наступного сценарію –

2. оператор case-sac:

case-sac в основному працює так само, як оператор switch у програмуванні. Іноді, якщо нам потрібно перевірити кілька умов, використання операторів if може ускладнитися. У такі моменти ми можемо використовувати оператор case-sac. Синтаксис буде –

Синтаксис оператора case-sac:

case $var in Pattern 1) Statement 1;; Pattern n) Statement n;; esac>

Приклад сценарію:

Name='Satyajit' case '$Name' in #case 1 'Rajib') echo 'Profession : Software Engineer' ;; #case 2 'Vikas') echo 'Profession : Web Developer' ;; #case 3 'Satyajit') echo 'Profession : Technical Content Writer' ;; esac>

Вихід оператора case-sac:

Profession : Technical Content Writer>

У наведеному вище прикладі інструкція case-sac виконала інструкцію, яка є частиною відповідного шаблону тут «Ім’я». Нижче наведено графічне зображення оболонки терміналу після виконання наступного сценарію –

Рядкове та числове порівняння

Порівняння рядків означає, що в сценаріях оболонки ми можемо приймати рішення, порівнюючи також рядки. Ось описова таблиця з усіма операторами –

перетворити int на подвійну java
Оператор опис
== Повертає true, якщо рядки рівні
!= Повертає true, якщо рядки не рівні
-п Повертає true, якщо рядок, який потрібно перевірити, не є нульовим
Повертає true, якщо рядок, який потрібно перевірити, має значення null

Арифметичні оператори використовуються для перевірки арифметичних умов. Наприклад, менше, більше, дорівнює тощо. Ось описова таблиця з усіма операторами –

Оператор опис
-екв Рівні
-ge Більше або дорівнює
-gt Більш чим
- Менше або дорівнює
Менше ніж
- є Нерівно

Нижче наведено простий приклад того самого –

Приклад сценарію:

if [ 10 -eq 10 ];then echo 'Equal' fi if [ 'Geeks' == 'Geeks' ]; then echo 'same' #output else echo 'not same' fi>

Вихід рядкових і числових порівнянь:

Equal same>

У цьому прикладі перший (-eq) є числовим порівнянням, яке перевіряє рівність. Другий ( == ) також перевіряє рівність, але в рядках. Нижче наведено графічне зображення оболонки терміналу після виконання наступного сценарію –

Детальніше про цю концепцію ми дізнаємося в наступних статтях.

Висновок

У цій статті ми обговорюємо сценарії Bash, які відіграють важливу роль в автоматизації завдань у середовищі Linux. Як інтерпретатор командного рядка Bash пропонує розробникам простоту та легкість використання для створення сценаріїв, які спрощують рутинні операції, маніпулюють файлами та виконують складні завдання. Незважаючи на те, що сценарії Bash можуть підвищити продуктивність, уникаючи повторюваних дій і ефективно виконуючи послідовності команд, вони також мають такі особливості, як керування дозволами, обробка змінних і впровадження структур прийняття рішень. Освоївши сценарії Bash, користувачі можуть використовувати його можливості для оптимізації робочого процесу та покращення завдань системного адміністрування на платформах Linux.