$ 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, лишаются доступа к сценарию еще на первом этапе проверки.
$ pg ifroot
#!/bin/sh
# ifroot
if [ "$LOGNAME" != "root" ]
# если пользователь не является пользователем root
echo "You need to be root to run this script" >&2
exit 1
else
# да, это пользователь root
echo "Yes indeed you are $LOGNAME proceed"
fi
# выполнение операторов в обычном режиме
18.3.13. Передача параметров сценария системной команде
Позиционные параметры можно передать сценарию, а затем проверить значение переменной. Если при этом пользователь указывает после названия сценария наименование каталога, сценарий заново присваивает специальному параметру $1 более содержательное название, в данном случае directory. С помощью команды ls -A проверяется, не является ли каталог пустым. Если каталог пуст, эта команда не возвращает данные. Затем отображается соответствующее сообщение.
$ pg ifdirec
#!/bin/sh
#ifdirec
#присваивание $1 переменной DIRECTORY DIRECTORY=$1
if [ "`ls -A $DIRECTORY/`"="" ] ; then
# если строка пуста, каталог пуст
echo "$DIRECTORY is indeed empty" else
# в противном случае, нет
echo "$DIRECTORY” is not empty"
fi
Вместо указанного метода можно воспользоваться другой возможностью. Получим аналогичный результат.
$ pg ifdirec2
#!/bin/sh
# ifdirec2
DIRECTORY=$1
if [ -z "`ls -A $DIRECTORY`" ] then
echo "$DIRECTORY is indeed empty" else
echo "$DIRECTORY is not empty"
fi
18.3.14. Применение команды null
Обычно при проведении проверки условий выполняются части then и else. Иногда независимо от того, истинно или ложно условие, нет необходимости переходить к действиям.
К сожалению, нельзя оставлять незаполненными части оператора if — здесь должен находиться какой‑либо оператор. Чтобы разрешить это затруднение, интерпретатор shell поддерживает команду null ':'. Команда null всегда возвращает значение "истина", что в данном случае нас удовлетворяет. Возвращаясь к предыдущему примеру, заметим, что если каталог пуст, команды можно размещать только в части then.
$ pg ifdirectory
#!/bin/sh
# ifdirectory