Чтение онлайн

на главную - закладки

Жанры

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

sh -v scriptname– - выводит каждую команду прежде, чем она будет выполнена. Того же эффекта можно добиться, вставив в сценарий команду set -v или set -o verbose.

Ключи -n и -v могут употребляться совместно: sh -nv scriptname.

sh -x scriptname– - выводит, в краткой форме, результат исполнения каждой команды. Того же эффекта можно добиться, вставив в сценарий команду set -x или set -o xtrace.

Вставив в сценарий set -u

или set -o nounset, вы будете получать сообщение об ошибке unbound variable всякий раз, когда будет производиться попытка обращения к необъявленной переменной.

4. Функция "assert", предназначенная для проверки переменных или условий, в критических точках сценария. (Эта идея заимствована из языка программирования C.)

Пример 29-4. Проверка условия с помощью функции "assert"

#!/bin/bash

# assert.sh

assert # Если условие ложно,

{ #+ выход из сценария с сообщением об ошибке.

E_PARAM_ERR=98

E_ASSERT_FAILED=99

if [ -z "$2" ] # Недостаточное количество входных параметров.

then

return $E_PARAM_ERR

fi

lineno=$2

if [ ! $1 ]

then

echo "Утверждение ложно: \"$1\""

echo "Файл: \"$0\", строка: $lineno"

exit $E_ASSERT_FAILED

# else

# return

# и продолжить исполнение сценария.

fi

}

a=5

b=4

condition="$a -lt $b" # Сообщение об ощибке и завершение сценария.

# Попробуйте поменять условие "condition"

#+ на что нибудь другое и

#+ посмотреть -- что получится.

assert "$condition" $LINENO

# Сценарий продолжит работу только в том случае, если утверждение истинно.

# Прочие команды.

# ...

echo "Эта строка появится на экране только если утверждение истинно."

# ...

# Прочие команды.

# ...

exit 0

5. Ловушка на выхто в этом сценарии может быть неправильно (подсказка: после ключевого словоде.

Команда exit, в сценарии, порождает сигнал 0, по которому процесс завершает работу, т.е.
– - сам сценарий [ 60 ] . Часто бывает полезным по выходу из сценария выдать "распечатку" переменных.

60

В соответствии с соглашениями, сигнал с номером 0 соответствует команде exit.

Установка ловушек на сигналы

trap

Определяет действие

при получении сигнала; так же полезна при отладке.

Сигнал (signal) -- это просто сообщение, передается процессу либо ядром, либо другим процессом, чтобы побудить процесс выполнить какие либо действия (обычно -- завершить работу). Например, нажатие на ControlC, вызывает передачу сигнала SIGINT, исполняющейся программе.

trap '' 2

# Игнорировать прерывание 2 (Control-C), действие по сигналу не указано.

trap 'echo "Control-C disabled."' 2

# Сообщение при нажатии на Control-C.

Пример 29-5. Ловушка на выходе

#!/bin/bash

trap 'echo Список переменных --- a = $a b = $b' EXIT

# EXIT -- это название сигнала, генерируемого при выходе из сценария.

a=39

b=36

exit 0

# Примечательно, что если закомментировать команду 'exit',

# то это никак не скажется на работе сценария,

# поскольку "выход" из сценария происходит в любом случае.

Пример 29-6. Удаление временного файла при нажатии на Control-C

#!/bin/bash

# logon.sh: Сценарий, написаный "на скорую руку", контролирует вход в режим on-line.

TRUE=1

LOGFILE=/var/log/messages

# Обратите внимание: $LOGFILE должен быть доступен на чтение (chmod 644 /var/log/messages).

TEMPFILE=temp.$$

# "Уникальное" имя для временного файла, где расширение в имени -- это pid процесса-сценария.

KEYWORD=address

# При входе, в файл /var/log/messages,

# добавляется строка "remote IP address xxx.xxx.xxx.xxx"

ONLINE=22

USER_INTERRUPT=13

CHECK_LINES=100

# Количество проверяемых строк.

trap 'rm -f $TEMPFILE; exit $USER_INTERRUPT' TERM INT

# Удалить временный файл, когда сценарий завершает работу по control-c.

echo

while [ $TRUE ] #Бесконечный цикл.

do

tail -$CHECK_LINES $LOGFILE> $TEMPFILE

# Последние 100 строк из системного журнала переписать во временный файл.

# Совершенно необходимо, т.к. новейшие версии ядер генерируют много сообщений при входе.

search=`grep $KEYWORD $TEMPFILE`

# Проверить наличие фразы "address",

# свидетельствующей об успешном входе.

Поделиться:
Популярные книги

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Кодекс Охотника. Книга XIV

Винокуров Юрий
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Болотник

Панченко Андрей Алексеевич
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Болотник

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Жестокая свадьба

Тоцка Тала
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Жестокая свадьба

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Голодные игры

Коллинз Сьюзен
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Голодные игры

Последняя Арена 8

Греков Сергей
8. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 8

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Последний Паладин

Саваровский Роман
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин

Измена. Свадьба дракона

Белова Екатерина
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Измена. Свадьба дракона