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

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

Жанры

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

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

Шрифт:

if [ !
– z "$search" ] # Кавычки необходимы, т.к. переменная может содержать пробелы.

then

echo "On-line"

rm -f $TEMPFILE # Удалить временный файл.

exit $ONLINE

else

echo -n "." # ключ -n подавляет вывод символа перевода строки,

# так вы получите непрерывную строку точек.

fi

sleep 1

done

# Обратите внимание: если изменить содержимое переменной KEYWORD

# на "Exit", то сценарий может использоваться для контроля

# неожиданного выхода (logoff).

exit 0

# Nick Drage предложил альтернативный метод:

while true

do ifconfig ppp0 | grep UP 1> /dev/null && echo "соединение

установлено" && exit 0

echo -n "." # Печать последовательности точек (.....), пока соединение не будет установлено.

sleep 2

done

# Проблема: Нажатия Control-C может оказаться недостаточным, чтобы завершить этот процесс.

# (Точки продолжают выводиться на экран.)

# Упражнение: Исправьте этот недостаток.

# Stephane Chazelas предложил еще одну альтернативу:

CHECK_INTERVAL=1

while ! tail -1 "$LOGFILE" | grep -q "$KEYWORD"

do echo -n .

sleep $CHECK_INTERVAL

done

echo "On-line"

# Упражнение: Найдите сильные и слабые стороны

# каждого из этих подходов.

Аргумент DEBUG, команды trap, заставляет сценарий выполнять указанное действие после выполнения каждой команды. Это можно использовать для трассировки переменных.

Пример 29-7. Трассировка переменной

#!/bin/bash

trap 'echo "VARIABLE-TRACE> $LINENO: \$variable = \"$variable\""' DEBUG

# Выводить значение переменной после исполнения каждой команды.

variable=29

echo "Переменная \"\$variable\" инициализирована числом $variable."

let "variable *= 3"

echo "Значение переменной \"\$variable\" увеличено в 3 раза."

# Конструкция "trap 'commands' DEBUG" может оказаться очень полезной

# при отладке больших и сложных скриптов,

# когда размещение множества инструкций "echo $variable"

# может потребовать достаточно большого времени.

# Спасибо Stephane Chazelas.

exit 0

Конструкция trap '' SIGNAL (две одиночных кавычки) -- запрещает SIGNAL для оставшейся части сценария. Конструкция trap SIGNAL– - восстанавливает действие сигнала SIGNAL. Эти конструкции могут использоваться для защиты критических участков сценария от нежелательного прерывания.

trap '' 2 # Сигнал 2 (Control-C) -- запрещен.

command

command

command

trap 2 # Разрешение реакции на Control-C

Глава 30. Необязательные параметры (ключи)

Необязательные параметры -- это дополнительные ключи (опции), которые оказывают влияние на поведение сценария и/или командной оболочки.

Команда set позволяет задавать дополнительные опции прямо внутри сценария. В том месте сценария, где необходимо, чтобы та или иная опция вступила в силу, вставьте такую конструкцию set -o option-name, или в более короткой форме -- set -option-abbrev. Эти две формы записи совершенно идентичны по своему действию.

#!/bin/bash

set -o verbose

# Вывод команд перед их исполнением.

#!/bin/bash

set -v

# Имеет тот же эффект, что и выше.

Для того, чтобы отключить действие той или иной опции, следует вставить конструкцию set +o option-name, или set +option-abbrev.

#!/bin/bash

set -o verbose

# Вывод команд перед их исполнением.

command

...

command

set +o verbose

#

Запретить вывод команд перед их исполнением.

command

# команда не выводится.

set -v

# Вывод команд перед их исполнением.

command

...

command

set +v

# Запретить вывод команд перед их исполнением.

command

exit 0

Как вариант установки опций, можно предложить указывать их в заголовке сценария (в строке sha-bang) -- #!.

#!/bin/bash -x

#

# Далее следует текст сценария.

Так же можно указывать дополнительные ключи в командной строке, при запуске сценария. Некоторые из опций работают только если они заданы из командной строки, например – i– - ключ интерактивного режима работы скрипта.

bash -v script-name

bash -o verbose script-name

Ниже приводится список некоторых полезных опций, которые могут быть указаны как в полной форме так и в сокращенной.

Таблица 30-1. Ключи Bash

Краткое имя Полное имя Описание
– C noclobber Предотвращает перезапись файла в операциях перенаправления вывода (не распространяется на конвейеры (каналы) -- >|)
– D (нет) Выводит список строк в двойных кавычках, которым предшествует символ $, сам сценарий не исполняется
– a allexport Экспорт всех, определенных в сценарии, переменных
– b notify Выводит уведомление по завершении фоновой задачи (job) (довольно редко используется в сценариях)
– c ... (нет) Читает команды из ...
– f noglob Подстановка имен файлов (globbing) запрещена
– i interactive Сценарий запускается в интерактивном режиме
– p privileged Сценарий запускается как "suid" (осторожно!)
– r restricted Сценарий запускается в ограниченном режиме (см. Глава 20).
– u nounset При попытке обращения к неопределенным переменным, выдает сообщение об ошибке и прерывает работу сценария
– v verbose Выводит на stdout каждую команду прежде, чем она будет исполнена
– x xtrace Подобна -v, но выполняет подстановку команд
– e errexit Прерывает работу сценария при появлении первой же ошибки (когда команда возвращает ненулевой код завершения)
– n noexec Читает команды из сценария, но не исполняет их (проверка синтаксиса)
– s stdin Читает команды с устройства stdin
– t (нет) Выход после исполнения первой команды
(нет) Конец списка ключей (опций), последующие аргументы будут восприниматься как позиционные параметры.
– - (нет) Эквивалент предыдущей опции (-).
Поделиться:
Популярные книги

Черный Маг Императора 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
рейтинг книги
Измена. Свадьба дракона