5 прикладів сценаріїв Bash, які допоможуть вам навчитися програмуванню в Linux

Скрипти Bash є одним із найбільш поширених та зручних методів для програмування в середовищі Linux. Ці прості приклади допоможуть вам розібратися з процесом та познайомлять з фундаментальними принципами програмування на Bash.

1. Виведення “Hello World” у Bash

Приклад “Hello World” є чудовим початком для вивчення будь-якої мови програмування, і Bash не є виключенням.

Ось як вивести текст “Hello World” за допомогою Bash:

  • Відкрийте текстовий редактор і створіть новий файл, вставивши наступний код.
  • Перший рядок кожного скрипта Bash повинен мати такий вигляд:
     #!/bin/bash 

    Інструкція Shebang (#!/bin/bash) є критично важливою, оскільки оболонка використовує її для визначення способу виконання скрипта. У цьому випадку вона вказує на використання інтерпретатора Bash.

  • Кожен рядок, що починається із символу #, вважається коментарем. Рядок shebang є особливим випадком, але ви можете додавати свої коментарі для пояснення коду. Наприклад, додайте коментар у другому рядку:
      # This script prints Hello World 
  • Ви можете вивести текст на стандартний вихід за допомогою команди echo, а потім вказати текст, який потрібно вивести. Додайте наступне у третьому рядку:
     echo "Hello World" 
  • Збережіть скрипт, бажано з розширенням .sh, наприклад, hello_world.sh. Розширення не є обов’язковим, але це корисна домовленість.
  • Щоб запустити скрипт, необхідно зробити файл виконуваним. Скористайтеся командою chmod («змінити режим») з аргументом +x («виконуваний файл») та назвою вашого скрипта:
     chmod +x hello_world.sh 
  • Запустіть скрипт, перебуваючи в його каталозі, за допомогою команди:
     ./hello_world.sh 
  • Після виконання скрипт виведе текст “Hello World” у вашому терміналі:

2. Створення каталогу шляхом зчитування введених даних

Зі своїх скриптів ви можете запускати будь-які програми, які зазвичай використовуєте в командному рядку. Наприклад, ви можете створити новий каталог за допомогою команди mkdir.

  • Почніть з інструкції shebang, як і раніше:
     #!/bin/bash 
  • Запросіть користувача ввести назву каталогу, використовуючи команду echo:
     echo "Введіть назву нового каталогу:" 
  • Використайте вбудовану команду read для отримання введених користувачем даних. Єдиним аргументом є змінна, в якій оболонка збереже введені дані:
     read newdir 
  • Щоб використати значення, збережене у змінній, необхідно поставити перед її назвою символ долара ($). Ви можете передати вміст вхідної змінної як аргумент команді mkdir для створення нового каталогу:
     mkdir $newdir 
  • Після запуску скрипт запропонує вам ввести дані. Введіть допустиму назву каталогу, і ви побачите, що скрипт створить його у поточному каталозі:

3. Створення каталогу за допомогою аргументів командного рядка

Замість інтерактивного зчитування даних, більшість команд Linux підтримують аргументи. Ви можете надати аргумент під час запуску програми, щоб змінити її поведінку.

У скрипті ви можете використовувати $1 для посилання на спеціальну змінну, яка містить значення першого аргументу. $2 посилатиметься на другий аргумент і так далі.

  • Створіть каталог за допомогою команди mkdir з попереднього прикладу. Проте, цього разу використовуйте вбудовану змінну $1:
     #!/bin/bash
    mkdir $1
  • Запустіть скрипт, передавши ім’я нового каталогу як аргумент:
     ./arg_dir.sh Test 

Можливо, ви запитаєте, що відбудеться, якщо запустити скрипт без аргументів. Спробуйте, і ви побачите повідомлення про помилку, яке починається з “usage: mkdir”:

Без аргументів командного рядка значення $1 буде порожнім. Коли ваш скрипт викликає mkdir, він не передасть йому жодного аргументу, і команда mkdir поверне помилку. Щоб цього уникнути, ви можете самостійно перевірити умову та вивести більш зрозуміле повідомлення про помилку:

  • Як завжди, почніть з рядка shebang:
     #!/bin/bash 
  • Перед викликом mkdir, перевірте, чи перший аргумент порожній (тобто аргументи відсутні). Ви можете зробити це за допомогою оператора Bash if, який виконує код на основі умови:
     if [ -z "$1" ]; then 
  • Якщо перший аргумент порожній, виведіть повідомлення про помилку та завершіть виконання скрипта:
         echo "Будь ласка, введіть ім'я нового каталогу як перший аргумент"
    exit
  • Трохи незвичне ключове слово “fi” (перевернуте “if”) сигналізує про кінець оператора if у Bash:
     fi 
  • Тепер ваш скрипт може продовжувати роботу, як і раніше, для обробки випадку, коли аргумент присутній:
     mkdir $1 

Коли ви запустите цю нову версію скрипта, то отримаєте повідомлення, якщо забудете ввести аргумент:

4. Видалення файлу за допомогою функції Bash

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

Ось приклад функції, що видаляє певний файл.

  • Почніть з рядка shebang:
     #!/bin/bash 
  • Визначте функцію, написавши її ім’я, потім порожні дужки та команди у фігурних дужках:
     del_file() {
    echo "Видаляю $1"
    rm $1
    }

    Потім ви можете викликати функцію, передавши їй ім’я файлу для видалення:

     del_file test.txt 

  • Коли ви викликаєте функцію, вона встановлює спеціальну змінну $? зі статусом виходу останньої виконаної команди. Статус виходу корисний для перевірки помилок. У цьому прикладі ви можете перевірити, чи команда rm виконана успішно:

     if [ $? -ne 0 ]; then
    echo "Вибачте, не вдалося видалити файл"
    fi

5. Створення простого калькулятора для арифметичних обчислень

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

Ось код для calc.sh:

 #!/bin/bash


echo "Введіть перше число: "
read a

echo "Введіть друге число: "
read b


echo "Виберіть арифметичну операцію:"
echo "1. Додавання"
echo "2. Віднімання"
echo "3. Множення"
echo "4. Ділення"
read choice


case $choice in
1)
result=`echo $a + $b | bc`
;;

2)
result=`echo $a - $b | bc`
;;

3)
result=`echo $a \* $b | bc`
;;

4)
result=`echo "scale=2; $a / $b" | bc`
;;
esac

echo "Результат: $result"

Зверніть увагу на використання case … esac, яке є аналогом оператора switch з інших мов. Це дозволяє порівняти значення змінної (у цьому випадку choice) з декількома фіксованими значеннями та виконати відповідний код.

Цей скрипт використовує команду bc для виконання обчислень.