Шрифт:
Вы можете также осуществлять контроль прав доступа к файлу. Ниже приводится несложная проверка на предмет того, можно ли вести записи в файле test.txt, который переприсвоен переменной logfile.
$ pg ifwr
#!/bin/sh
# ifwr
LOGFILE=test.txt echo $LOGFILE
if [ ! —w "$LOGFILE" ]; then
echo " You cannot write to $LOGFILE " >&2
fi
18.3.8. Проверка параметров, передаваемых сценарию
Оператор if может применяться при определении числа параметров, которые передаются сценарию. Чтобы проверить, соответствует ли количество необходимых параметров количеству вызываемых параметров, используется специальная переменная $#, содержащая число вызываемых параметров.
В приведенном ниже примере проверяется наличие трех параметров; если они отсутствуют, на экран выводится сообщение из стандартного потока ошибок. Затем сценарий завершается, отображая статус ошибки. Если же количество параметров равно трем, все аргументы выводятся на экран.
$ pg ifparam
#!/bin/sh
# ifparam
if [ $# -lt 3 ] ; then
#вызывается меньше, чем 3 параметра, на экран выводится сообщение, затем
#прерывается выполнение сценария
echo "Usage: `basename $0` arg1 arg2 arg3" >&2
exit 1
fi
# хорошо, получено 3 параметра, отображаются на экране
echo "arg1: $1"
echo "arg2: $2"
echo "arg3: $3"
Если передается только два параметра, на экран выводится соответствующее сообщение, и сценарий прекращает выполняться:
$ ifparam cup medal
Usage:ifparam argl arg2 arg3
При передаче трех параметров происходит следующее:
$ ifparam cup medal trophy
argl: cup arg2: medal arg3: trophy
18.3.9. Определение интерактивного режима выполнения сценария
Иногда требуется выяснить, выполняется сценарий в интерактивном режиме (режим терминала( либо не в интерактивном режиме (команды cron или at). Такая информация необходима для того, чтобы сценарий мог определить, где можно получить вводимые данные и куда направлять выводимые данные. Чтобы уточнить режим выполнения сценария, достаточно воспользоваться командой test с опцией -t. Если возвращается значение "истина", сценарий выполняется в интерактивном режиме.
$ pg ifinteractive
#! /bin/sh
# ifinteractive
if [ -t ]; then
echo "We are interactive with a terminal"
else
echo "We must be running from some background process probably cron or at " fi
18.3.10. Простые операторы if else
Следующая форма оператора if применяется чаще всего:
if условие
then команды1
else
команды2
fi
Если условие не удовлетворяет тестированию, часть else оператора if позволяет перейти к соответствующей операции.
18.3.11. Проверка установок переменных
Ниже проверяется установка переменной среды editor. Если переменной EDITOR не присвоено значение, пользователь информируется о том, что переменная editor не установлена. Если переменная editor установлена, тип редактора отображается на экране:
$ рg ifeditor
#!/bin/sh
# ifeditor
if [ -z $EDITOR ]; then
#переменная не установлена
echo "Your EDITOR environment is not set"
else
#посмотрим, что же это
echo "Using $EDITOR as the default editor"
18.3.12. Проверка пользователя, выполняющего сценарий
В следующем примере для проверки условия используется переменная среды. Здесь проверяется, присвоено ли переменной LOGNAME значение "root". Обычно этот тип оператора добавляется в начале сценариев в качестве дополнительной меры безопасности. Несомненно, переменная LOGNAME может проверяться для каждого действительного пользователя.
Если значение переменной не равно строке "root", на экран выводится сообщение из стандартного потока ошибок. Пользователь информируется о том, что он не является пользователем root, а сценарий завершается со значением ошибки, равным 1.
Если строка "root" равна значению переменной LOGNAME, выполняется оператор, который находится после else.
На практике в этом случае сценарий продолжает обработку задания в обычном режиме. Соответствующие операторы находятся после конструкции fi, поскольку все пользователи, отличные от пользователя root, лишаются доступа к сценарию еще на первом этапе проверки.