echo "`'basename $0`: ERROR failed to copy $1 to $2"
exit 1
fi
Выполнение сценария при отсутствии ошибки, связанной с командой ср:
$ ifср2 myfile.lex myfile.lex.bak
Сценарий выполняется при наличии ошибок в команде ср:
$ ifcp2 myfile.lexx myfile.lex.bak
ifcp2: ERROR failed to copy myfile.lexx myfile.lex.bak
В следующем примере для сортировки файла под именем accounts.qtr применяется команда sort.
Результаты вывода направляются в системную корзину. Но кому интересно видеть на экране 300 отсортированных строк? Если сортировка прошла успешно, не нужно предпринимать никаких действий; если при выполнении команды имелись сбои, следует сообщить об этом пользователю.
$ pg ifsort
#!/bin/sh
# ifsort
if sort accounts.qtr > /dev/null
# отсортировано. Прекрасно
then :
else
# лучше сообщим об этом пользователю
echo "`basename $0`: Oops..errors could not sort accounts.qtr"
Операторы if можно вкладывать; при этом нужно следить, чтобы каждому ключевому слову if соответствовало слово fi.
В предыдущих разделах к переменной среды editor обращались, чтобы узнать, установлена ли она. Сделаем шаг вперед и уточним, не была ли переменная среды установлена ранее. Ниже приводится соответствующий сценарий.
$ pg ifseted
#!/bin/sh
#ifseted
#установлена ли переменная EDITOR ?
if [ -z $EDITOR ] ; then
echo "Your EDITOR environment ls not set"
echo "2 will assume you want to use vi..OK"
echo -n "Do you wish to change it now? [y..n] :"
read ANS
# проверка верхнего или нижнего регистра для 'у'
if [ "$ANS"="у" ] || [ "$ANS"="Y" ]; then
echo "enter your editor type :"
read EDITOR
if [ -z $EDITOR ] || [ "$EDITOR"="" ]; then
#если переменная EDITOR не установлена, ей не присвоено значение,
#тогда присвоим ей значение vi
echo "No, editor entered, using vi as default"
EDITOR=vi; export EDITOR
fi
# берется значение и присваивается переменной EDITOR
EDITOR=$EDITOR
export EDITOR
echo "setting $EDITOR"
fi
else
# пользователь
echo "Using vi as the default editor"
EDITOR=vi; export EDITOR
fi
Рассмотрим, как работает приведенный сценарий. Сначала проверим, установлена ли эта переменная. Если это так, появляется сообщение, что редактор vi применяется как редактор, заданный по умолчанию. Затем vi устанавливается в качестве редактора, и сценарий завершается.
Если редактор vi не установлен, пользователю поступает запрос, следует ли установить это значение. Проверка выполняется независимо от регистра, в котором находится символ у. Если пользователь не вводит значения, отличные от у или у, сценарий завершается.
На данном этапе пользователю предлагается ввести тип редактора. Затем выполняется проверка, не установлен ли данный редактор, а также уточняется, не нажимал ли пользователь во время проверки $editor ="" клавишу [Return]. Действительно эта проверка реализована лучше, чем -z $editor, но оба этих метода приводятся лишь в качестве иллюстрации. Если результаты проверки будут отрицательны, на экран выводится сообщение, что применяется редактор vi, причем значение vi присваивается переменной editor.
Если пользователь вводит имя для переменной editor, происходит присвоение и экспорт этого имени.
До сих пор каталог создавался путем передачи названия каталога в сценарий. Затем сценарий запрашивал пользователя, создан ли каталог. В следующем примере создается каталог, и все файлы *.txt копируются из текущего каталога в новый каталог. В приведенном сценарии с помощью кода завершения последней команды проверяется успешность выполнения каждой из команд. Если результаты выполнения команд неудовлетворительны, пользователю направляется соответствующее сообщение.
$ pg ifmkd±r2
#!/bin/sh
#ifmkdir2
DIR_NAME=testdirec
#где мы находимся?
THERE=`pwd`