Сценарії командної оболонки в os linux

Якщо ви вмієте вводити команди в оболонку Linux, ви зможете писати сценарії оболонки Bourne (bash). Сценарій - це послідовність команд записаних в файл, а оболонка читає ці команди з файлу, як якщо б ви вводили ці команди з терміналу.

Як і з будь-якою програмою в системах Unix, вам потрібен набір бітів на виконання для файлу сценарію, але ви можете також встановити біти на читання. Ось найпростіший спосіб зробити це:

Основи сценаріїв оболонки Linux

Для тестування команд, ви можете встановити Linux на свій ПК або замовити сервер і навіть VPS. Всі сценарії оболонки Bourne повинні починатися з наступного рядка, що означає, що програма / bin / sh повинна виконати команди у файлі сценарію:

Переконайтеся, що на початку файлу немає прогалин. Ви можете скласти список з будь-яких команд, які ви хочете передати на виконання оболонці після рядка #! / Bin / sh. Ось дуже простий приклад:

#! / Bin / sh
#
# Print something, then run ls
echo About to run the ls command. ls

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

Обмеження сценаріїв оболонки

Уважно стежте за розмірами ваших скриптів. Сценарії Bash не повинні бути дуже великими (хоча ви, безсумнівно, зустрінетеся свого часу зі справжніми монстрами).

цитування константи

Константа - це рядок, яку оболонка не повинна змінювати при переміщенні в командний рядок. Щоб побачити, де може стати в нагоді константа, розгляньте приклад того, як інтерпретатор Bash зазвичай поширює * на всі файли і каталоги в поточному каталозі, а потім передає всі ці елементи на поточну командний рядок. Якщо ви просто хочете, щоб зірка (*) використовувалася командою, як для grep і інших програм, які використовують звичайні: вираження, вам потрібна спеціальна система позначень, щоб обійти константу *.

Найлегший спосіб зробити так, щоб оболонка не чіпала рядок, це укласти всю рядок в одинарні лапки. Ось приклад для grep і *.

grep 'r. * t' / etc / passwd

Всі символи, поміщені між двома одинарними лапками, включаючи пробіли, перетворюються в одиночну константу. Отже, наступна команда не буде працювати, тому що вона запитує команду grep шукати рядок r. * T / etc / passwd з стандартного виводу (бо заданий тільки один параметр):

grep 'r. * t / etc / passwd'

Подвійні лапки ( ") працюють так само як і одинарні, за винятком того, що Bash поширюється на всі змінні, які знаходяться всередині подвійних лапок, тоді як вона не поширюється на змінні, що знаходяться всередині одинарних лапок. Ви можете побачити відмінності, запустивши таку команду і, замінивши подвійні лапки одинарними, запустити її знову.

echo "There is no * in my path: $ PATH"

Основна хитрість при використанні констант в оболонці Bourne - це передача константи в одинарних лапках команді. Це можна зробити, помістивши зворотну косу риску перед символом одинарної лапки:

echo I don \ 't like contractions inside shell scripts.

І лапки, і зворотний слеш повинні бути за межами будь-якої пари одинарних лапок. Рядки, на зразок * don \ 't, призводять до синтаксичним помилок. Проте, як не дивно, ви можете закривати одинарні лапки всередині подвійних лапок, як показує наступний приклад (висновок ідентичний тому, що в попередній команді):

echo "I do not like contractions inside shell scripts."

Особливі змінні командного інтерпретатора Linux

Більшість сценаріїв оболонки розуміє параметри командного рядка і взаємодіє з командами, які вони запускають. Щоб написати свої сценарії з простих списків команд для більш гнучких програм, вам потрібно знати, як використовувати особливі змінні інтерпретатора Bourne Shell. Використання особливих змінних не сильно відрізняється від використання будь-яких інших змінних оболонки, але ви не можете змінити значення конкретних спеціальних змінних.

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

$ 1, $ 2, ...
$ 1, $ 2 і всі змінні, названі позитивними ненульовими цілими числами, містять значення параметрів сценарію або аргументи. Припустимо, що наступний скрипт називається pshow:
#! / Bin / sh
echo First argument: $ 1
echo Third argument: $ 3

Запуск [pshow one two three] видає такий висновок:

First argument: one Third argument: three

Вбудована команда оболонки shift використовується без аргументованих змінних. Ця команда видаляє перший аргумент ($ 1) і просуває інші аргументи вперед - тобто, $ 2 стає $ 1, $ 3 стає $ 2.

Припустимо, що ім'я наступного скрипта shiftex:

#! / Bin / sh
echo Argument: $ 1
shift
echo Argument: $ 1
shift
echo Argument: $ 1
shift

Запустіть shiftex one two three. З'явиться висновок:

Argument: one, Argument: two Argument: three

$ #
Змінна $ # містить число аргументів, переданих сценарієм. Ця змінна особливо важлива при запуску shift в циклі, щоб відбирати аргументи; коли $ # дорівнює 0, не залишається аргументів, так що $ 1 порожній.

# R / bin / sh
gs -q -dBATCH -dSAFER -s OutputFile = - -sDevice = pnmraw $ @

#! / Bin / sh
gs -q -Dbatch -dNOPAUSE -dSAFER \
-s OutputFile = - -sDevice = pnmraw $ @

Висновок $ @ в подвійні лапки ( "$ @") поширюється на параметри, розділені пробілами.

$ 0
Змінна $ 0 містить ім'я сценарію і дуже корисна для створення повідомлень діагностики. Припустимо, що ваш скрипт потребує повідомленні про невірне аргументі, який зберігається в змінній $ BADPARM. Ви можете роздрукувати повідомлення діагностики за допомогою наступного рядка, так що ім'я сценарію з'явиться в повідомленні про помилку:

echo $ 0: bad option $ BADPARM

echo $ 0: bad option $ BADPARM 1> # 038; 2

$$
Мінлива $$ містить ID процесу оболонки.

$?
Змінна $? містить код завершення останньої команди, яку виконала оболонка. Код завершення дуже важливий для керування сценаріями оболонки, і про нього буде розказано далі.

коди завершення

Коли програма Linux завершує свою роботу, вона залишає після себе код завершення для батьківського процесу, який запустив програму. Код завершення - це число, і іноді він називається кодом помилки. Коли код завершення нуль (0), це означає, що програма відпрацювала без проблем. Однак, якщо в програмі є помилка, то вона зазвичай завершується з якимось відмінним від нуля числом.

Код завершення останньої команди міститься в спеціальній змінній $. так що ви можете перевірити його самостійно в вашому запрошенні оболонки:

$ Is /> / dev / null
$ Echo $?
0
$ Is / asdfasdf> / dev / null
Is: / asdfasdf: No such file or directory
$ Echo $?
1

Ви бачите, що успішна команда повернула 0, а неуспішна команда повернула 1. Якщо ви збираєтеся використовувати код завершення команди, ви повинні скористатися або зберегти код відразу після запуску команди. Наприклад, якщо ви запускаєте третій echo $? відразу після попередніх послідовностей команд, результатом буде 0, тому що друга з двох команд echo завершилася успішно.

Коли ви пишете код оболонки, який перериває виконання скрипта ненормально, вам слід скористатися чимось на зразок exit 1, щоб передати код завершення одиниці назад якомусь батьківського процесу, який жбурнув сценарій. Вам не обов'язково використовувати 1; наприклад, якщо хочете, то можете використовувати різні числа для різних умов.

Деякі програми, на кшталт diff і grep, використовують ненульовий код завершення, щоб позначити нормальні умови. Наприклад, grep повертає 1 якщо знайде що-небудь відповідне його шаблоном в тексті, та способу 0 - якщо не знайде. В цьому випадку, ненульовий код завершення - це не помилка. Ці команди використовують інші коди завершення для помилок: grep і diff використовують 2 для справжніх проблем. Якщо ви думаєте, що програма використовує нестандартний код завершення, прочитайте сторінку керівництва. Код завершення зазвичай розкривається в розділі DIAGNOSTICS.

VPS / VDS за 389 р. від RigWEB.RU з адмініструванням

Схожі статті