Основи BASH. Частина 1., Linux, Операційні системи, статті

Безумовно, всі ті хто спілкується з ОС 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-скрипт повинен починатися з рядка:

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


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


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

#!/bin/bash
# Вказуємо де у нас зберігається bash-інтерпретатор
parametr1 = $ 1 # присвоюємо змінної parametr1 значення першого параметра скрипта
script_name = $ 0 # присвоюємо змінної script_name значення імені скрипта
echo “Ви запустили скрипт з ім’ям $ script_name і параметром $ parametr1” # команда echo виводить певну рядок, звернення до змінних здійснюється через $ ім’я_змінної.
echo `Ви запустили скрипт з ім’ям $ script_name і параметром $ parametr1` # тут ми бачимо інші лапки, різниця в тому, що в одинарних лапках не відбувається підстановки змінних.
exit 0 # Вихід з кодом 0 (вдале завершення роботи скрипта)

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

ite@ite-desktop:~$ ./test.sh qwerty
Ви запустили скрипт з іменем. / Test.sh і параметром qwerty
Ви запустили скрипт з ім’ям $ script_name і параметром $ parametr1

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

$ DIRSTACK – вміст вершини стека каталогів
$ EDITOR – текстовий редактор за умовчанням
$ EUID – Ефективний UID. Якщо ви використовували програму su для виконання команд від іншого користувача, то ця змінна містить UID користувача, в той час як …
$ UID – … містить реальний ідентифікатор, який встановлюється тільки при логіні.
$ FUNCNAME – ім’я поточної функції в скрипті.
$ GROUPS – масив груп до яких належить поточний користувач
$ HOME – домашній каталог користувача
$ HOSTNAME – ваш hostname
$ HOSTTYPE – архітектура машини.
$ LC_CTYPE – внутрішня змінна, котороя визначає кодування символів
$ OLDPWD – колишній робітник каталог
$ OSTYPE – тип ОС
$ PATH – шлях пошуку програм
$ PPID – ідентифікатор батьківського процесу
$ SECONDS – час роботи скрипта (в сек.)
$ # – Загальна кількість параметрів переданих скрипту
$ * – Всі аргументи переданине скрипту (виводяться в рядок)
$ @ – Теж саме, що й попередній, але параметри виводяться в стовпчик
$! – PID останнього запущеного в тлі процесу
$ $ – PID самого скрипта


Умови


Умовні оператори, думаю, знайомі практично кожному, хто хоч раз намагався на чомусь писати програми. В bash умови пишуться слід. чином (як звичайно на прикладі):
#!/bin/bash
source = $ 1 # в змінну source засовуємо перший параметр скрипта
dest = $ 2 # в змінну dest засовуємо другий параметр скрипта

if [[“$ source”-eq “$ dest”]] # в ковичках вказуємо імена змінних для порівняння. -Eq – логічне порівняння позначають “рівні”
then # якщо вони дійсно рівні, то
echo “Пріменік $ dest і джерело $ source один і той же файл!” # Виводимо повідомлення про помилку, тому що $ Source і $ dest у нас рівні
exit 1 # виходимо з помилкою (1 – код помилки)
else # якщо ж вони не рівні
cp $ source $ dest # то виконуємо команду cp: копіюємо джерело в приймач
echo “Вдале копіювання!”
fi # позначаємо закінчення умови.

Результат виконання скрипта:
ite@ite-desktop:~$ ./primer2.sh 1 1
Пріменік 1 і джерело 1 один і той же файл!
ite@ite-desktop:~$ ./primer2.sh 1 2
Вдале копіювання!

Таким чином оператогр умови мають наступний вигляд:
if [[“щось” <оператор логічного порівняння "з чимось"]]
then
якусь дію, якщо порівняння виконано успішно
else
дію якщо порівняння виконано не успішно
fi
В деяких випадках оператор else може бути опущений.

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


Якщо необхідно порівнювати како-то одну змінну з великою кількістю параметрів, то доцільніше використовувати оператор case.
#!/bin/bash
echo “Виберіть редатор для запуску:”
echo “1 Запуск програми nano”
echo “2 Запуск програми vi”
echo “3 Запуск програми emacs”
echo “4 Вихід”
read doing # тут ми читаємо в змінну $ doing зі стандартного вводу

case $doing in
1)
/ Usr / bin / nano # якщо $ doing містить 1, то запустити nano
;;
2)
/ Usr / bin / vi # якщо $ doing містить 2, то запустити vi
;;
3)
/ Usr / bin / emacs # якщо $ doing містить 3, то запустити emacs
;;
4)
exit 0
;;
*) # Якщо введено з клавіатури те, що в case не описується, виконувати наступне:
echo “Введено неправильне дію”

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

Результат роботи:
ite@ite-desktop:~$ ./menu2.sh
Виберіть редатор для запуску:
1 Запуск програми nano
2 Запуск програми vi
3 Запуск програми emacs
4 Вихід

Після вибір цифри і натискання Enter запуститися той редактор, який ви вибрали (якщо звичайно всі шляхи вказані правильно, і у вас встановлено ці редактори :))
Прведу список логічних операторв, які використовуються для конструкції if-then-else-fi:
-Z # рядок порожній
-N # рядок не порожній
=, (==) # Рядки рівні
! = # Рядки нерівні
-Eq # одно
-Ne # нерівно
-Lt, (<) # менше
-Le, (<=) # менше або дорівнює
-Gt, (>) # більше
-Ge, (> =) # більше або дорівнює
! # Заперечення логічного вираження
-A, (&&) # логічне “І”
-O, (/ /) # логічне “АБО”

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*