Скрипти 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 aecho "Введіть друге число: "
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`
;;
esacecho "Результат: $result"
Зверніть увагу на використання case … esac, яке є аналогом оператора switch з інших мов. Це дозволяє порівняти значення змінної (у цьому випадку choice) з декількома фіксованими значеннями та виконати відповідний код.
Цей скрипт використовує команду bc для виконання обчислень.