основи bash

Безумовно, все ті хто спілкується з ОС Linux хоч раз так мали справу (у всякому разі чули точно) з командною оболонкою BASH. Але BASH не тільки командна оболонка, це ще й чудовий скриптова мова програмування.

Мета цієї статті - познайомити ближче користувачів з bash, розповісти про синтаксис, основні прийоми та фішки мови, для того щоб навіть звичайний користувач зміг швиденько написати простий скрипт для виконання щоденної (-недельной, -місячний) рутинної роботи або, скажімо, «на коліні »наваять скриптик для бекапа директорії.

BASH - Bourne-Again SHell (що може перекладається як «оновлений йшов», або «Знову йшов Борна (творець sh)»), найпопулярніший командний інтерпретатор в юніксоподобних системах, особливо в GNU / Linux. Нижче приведу ряд вбудованих команд, які ми будемо використовувати для створення своїх скриптів.

  • break - вихід з циклу for, while або until
  • continue - виконання наступної ітерації циклу for, while або until
  • echo - висновок аргументів, розділених пробілами, на стандартний пристрій виводу
  • exit - вихід з оболонки
  • export - зазначає аргументи як змінні для передачі в дочірні процеси в середовищі
  • hash - запам'ятовує повні імена шляхів команд, вказаних в якості аргументів, щоб не шукати їх при наступному зверненні
  • kill - посилає сигнал завершення процесу
  • pwd - виводить поточний робочий каталог
  • read - читає рядок з введення оболонки і використовує її для присвоєння значень зазначеним змінним.
  • return - змушує функцію оболонки вийти з вказаним значенням
  • shift - переміщує позиційні параметри наліво
  • test - обчислює умовний вираз
  • times - виводить ім'я користувача і системний час, використане оболонкою і її нащадками
  • trap - вказує команди, які повинні виконуватися при отриманні оболонкою сигналу
  • unset - викликає знищення змінних оболонки
  • wait - чекає виходу з дочірнього процесу і повідомляє вихідний стан.

І звичайно ж крім вбудованих команд ми будемо використовувати цілу купу зовнішніх, окремих команд-програм, з якими ми познайомимося вже в процесі

Що необхідно знати з самого початку

1. Будь-який bash-скрипт повинен починатися з рядка:

в цьому рядку після #! вказується шлях до bash-інтерпретатора, тому якщо він у вас встановлений в іншому місці (де, ви можете дізнатися набравши whereis bash) поміняйте її на ваш шлях.

2. Коментарі починаються з символу # (крім першого рядка).

3. В bash змінні не мають типу (про них мова піде нижче)

Змінні і параметри скрипта

Наведу як приклад невеликий приклад, який ми розберемо:

# Вказуємо де у нас зберігається bash-інтерпретатор

parametr1 = $ 1 # присвоюємо змінної parametr1 значення першого параметра скрипта

script_name = $ 0 # присвоюємо змінної script_name значення імені скрипта

echo "Ви запустили скрипт з ім'ям $ script_name і параметром $ parametr1" # команда echo виводить певну рядок, звернення до змінних здійснюється через $ ім'я_змінної.

echo 'Ви запустили скрипт з ім'ям $ script_name і параметром $ parametr1' # тут ми бачимо інші лапки, різниця в тому, що в одинарних лапках не відбувається підстановки змінних.

exit 0 # Вихід з кодом 0 (вдале завершення роботи скрипта)

Результат виконання скрипта:

Ви запустили скрипт з ім'ям ./test.sh і параметром qwerty

Ви запустили скрипт з ім'ям $ script_name і параметром $ parametr1

Після того як ми познайомилися як використовувати змінні і передавати скрипту параметри, час познайомитися з зарезервованими змінними:

Умовні оператори, думаю, знайомі практично кожному, хто хоч раз намагався на щось писати програми. В bash умови пишуться слід. чином (як зазвичай на прикладі):

source = $ 1 # в змінну source засовуємо перший параметр скрипта

dest = $ 2 # в змінну dest засовуємо другий параметр скрипта

if [[ "$ source" -eq "$ dest"]] # в лапках вказуємо імена змінних для порівняння. -eq - логічне порівняння позначають "рівні"

then # якщо вони дійсно рівні, то

echo "Пріменік $ dest і джерело $ source один і той же файл!"

exit 1 # виходимо з помилкою (1 - код помилки)

else # якщо ж вони не рівні

cp $ source $ dest # то виконуємо команду cp: копіюємо джерело в приймач

fi # позначаємо закінчення умови.

Результат виконання скрипта:

Пріменік 1 і джерело 1 один і той же файл!

Структура if-then-else використовується наступним чином:

if <команда или набор команд возвращающих код возврата(0 или 1)>

<если выражение после if истино, то выполняется этот блок>

<если выражение после if ложно, тот этот>

Як команд повертають код повернення можуть виступати структури [[. [. test, (()) або будь-яка інша (або кілька) linux-команда.

  • test - використовується для логічного порівняння. після висловлення, неоьбходіма закриває дужка "]"
  • [- синонім команди test
  • [[- розширена версія "[" (починаючи з версії 2.02) (як в прикладі), усередині якої можуть бути використані || (Або), (І). Повинна мати закривающуб дужку "]]"
  • (()) - математичне порівняння.

Для побудови багатоярусних умов виду:

для стислості і читання коду, можна використовувати структуру:

Умови. множинний вибір

Якщо необхідно порівнювати какао-то одну змінну з великою кількістю параметрів, то доцільніше використовувати оператор case.

echo "Виберіть редатор для запуску:"

echo "1 Запуск програми nano"

echo "2 Запуск програми vi"

echo "3 Запуск програми emacs"

read doing # тут ми читаємо в змінну $ doing зі стандартного введення

/ Usr / bin / nano # якщо $ doing містить 1, то запустити nano

/ Usr / bin / vi # якщо $ doing містить 2, то запустити vi

/ Usr / bin / emacs # якщо $ doing містить 3, то запустити emacs

*) # Якщо введено з клавіатури те, що в case не описується, виконувати наступне:

echo "Введено неправильне дію"

esac # закінчення оператора case.

Виберіть редатор для запуску:

1 Запуск програми nano

2 Запуск програми vi

3 Запуск програми emacs

Прведу список логічних операторів, які використовуються для конструкції if-then-else-fi:

  • -z # рядок порожня
  • -n # рядок не порожній
  • =, (==) # рядки рівні
  • != # Рядки нерівні
  • -eq # одно
  • -ne # нерівно
  • -lt, (<) # меньше
  • -le, (<=) # меньше или равно
  • -gt, (>) # більше
  • -ge, (> =) # більше або дорівнює
  • ! # Заперечення логічного виразу
  • -a, () # логічне «І»
  • -o, (||) # логічне «АБО»

З основами мови і умовами ми розібралися, щоб не перевантажувати статтю, розіб'ю її на кілька частин (припустимо на 3). У другій частині розберемо оператори циклу і виконання математичних операцій.

Схожі статті