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




Программирование на языке сценариев командной оболочки - стр. 4


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

Пример 2-2. cleanup: Расширенная версия предыдущего сценария.

#!/bin/bash # cleanup, version 2 # Для работы сценария требуются права root.

LOG_DIR=/var/log ROOT_UID=0 # Только пользователь с $UID 0 имеет привилегии root. LINES=50 # Количество сохраняемых строк по-умолчанию. E_XCD=66 # Невозможно сменить каталог? E_NOTROOT=67 # Признак отсутствия root-привилегий.

if [ "$UID" -ne "$ROOT_UID" ] then echo "Для работы сценария требуются права root." exit $E_NOTROOT fi

if [ -n "$1" ] # Проверка наличия аргумента командной строки. then lines=$1 else lines=$LINES # Значение по-умолчанию, если число не задано в командной строке fi

# Stephane Chazelas предложил следующее, #+ для проверки корректности аргумента, переданного из командной строки, #+ правда это достаточно сложно для данного руководства. # # E_WRONGARGS=65 # Не числовой аргумент # # case "$1" in # "" ) lines=50;; # *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;; # * ) lines=$1;; # esac # #* Конец проверки корректности аргумента

cd $LOG_DIR

if [ `pwd` != "$LOG_DIR" ] # или if [ "$PWD" != "$LOG_DIR" ] # Не в /var/log? then echo "Невозможно перейти в каталог $LOG_DIR." exit $E_XCD fi # Проверка каталога перед очисткой лог-файлов.

# более эффективный вариант: # # cd /var/log || { # echo "Невозможно перейти в требуемый каталог." >&2 # exit $E_XCD; # }

tail -$lines messages > mesg.temp # Сохранить последние строки в лог-файле. mv mesg.temp messages

# cat /dev/null > messages #* Необходимость этой команды отпала, поскольку очистка выполняется выше.

cat /dev/null > wtmp # команды ': > wtmp' и '> wtmp' имеют тот же эффект.


Содержание  Назад  Вперед