Основи BASH. Частина 1.

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

*

*