Файл backup.defaults содержит заданные по умолчанию настройки наряду с функцией continue_prompt. Ниже приводится содержимое файла.
$ pg backup.defaults
#!/bin/sh
#backup.defaults
#файл конфигурации, заданный по умолчанию, для сетевых резервных копий
#редактируете его на свой страх и риск!!
#
_CODE="comet"
_LOGFILE="/appdva/backup/log.`date +%y%m%d`"
_DEVICE="rmt0"
_INFORM="yes"
_TYPE="Full"
continue_prompt ()
#continue_prompt
#для вызова: continue_prompt "отображаемая строка"
default_answer ()
{
_STR=$1
_DEFAULT=$2
# проверка ввода корректных параметров
if [ $# -lt 1 ]; then
echo "continue_prompt: I need a string to display"
return 1
fi
while : do
echo -n "$_STR [Y.. N] [$_DEFAULT]:"
read _ANS
: ${_ANS:=$_DEFAULT]
if [ "$_ANS" = "" ]; then
case $_ANS in
Y) return 0 ;;
N) return 1 ;;
esac
fi # пользователь сделал выбор
case $_ANS in
y|Y|Yes|YES) return 0;;
n|N|No|NO) return 1;;
*) echo "Answer either Y or N, default is $_DEFAULT";;
esac
echo $_ANS
done
}
Ниже приводится поток вывода при отображении настроек, заданных по умолчанию, причем пользователя запрашивают, желает ли он изменить эти настройки:
Следующий поток вывода иллюстрирует процесс изменения значения для настроек, заданных по умолчанию. Здесь изменился тип резервного копирования, и когда сценарий проверяет ленточный накопитель, он обнаруживает определенные проблемы. Сценарий завершает работу с помощью кода завершения последней команды.
Tape Device: rmt0, rmt1, rmt3
Mail Admin: yes, no
Backup Type: full, normal, Sybase
Tape Device To Be Used For This Backup [rmt0]:
Mail Admin When Done [yes]:
Backup Type [Full]: Normal
Cannot rewind the tape..is it in the tape drive ???
Check it out
27.3. Сценарий del.lines
О данном сценарии часто заходит речь, когда разработчики вопрошают: "Где же команда sed, выполняющая повторное удаление пустых строк?" Именно для этой цели и создан этот небольшой сценарий.
Действительно, сценарий представляет собой оболочку для потокового редактора sed. Поскольку этот процесс применяется довольно часто, разработчики заинтересованы в подобном сценарии.
Сценарии интерпретатора shell не должны быть большими. Создание сценариев целесообразно, если при автоматизации задач экономится время пользователя.
Сценарий del.lines может обрабатывать один или несколько файлов. До того, как команда sed приступит к удалению всех пустых строк, проверяется наличие каждого файла. Поток вывода команды sed с помощью символов $$ направляется во временный файл. Затем файл перемещается обратно, заменяя исходный файл.
Чтобы просмотреть все имена файлов, применяется команда shift. Цикл while выполняется до тех пор, пока имеются обрабатываемые файлы.
Введите команду del.lines -help, в результате чего отобразится немного разреженная справочная строка. Желательно создать более удобную справочную конструкцию. Сценарий имеет следующий вид:
$ pg del.lines
#!/bin/sh
#del.lines
#сценарий получает имена файлов и удаляет из них все пустые строки
TEMP_F=/tmp/del.lines.$$
usage ()
{
# usage
echo "Usage :`basename $0` file [file..]"
echo "try `basename $0` -help for more info"
exit 1
}
if [ $# -eq 0 ]; then
usage
fi
FlLES=$1
while [ $# -gt 0 ] do
echo "..$1"
case $1 in
-help) cat << MAYDAY
Use this script to delete all blank lines from a text file(s)
MAYDAY
exit 0;;
*)FILE_NAME=$1
if [ -f $1 ]; then
sed '/^$/d' $FILE_NAME > $TEMP_F
mv $TEMP_F $FILE_NAME
else
echo "`basename $0` cannot find this file : $1"
fi
shift;;
esac
done
27.4. Сценарий access.deny
Чтобы пользователи не регистрировались в системе при введении необходимых обновлений, можно воспользоваться методом /etc/nologin, который доступен для большинства систем. Когда в каталоге /etc создается файл nologin, обычно применяется команда touch. И никто из пользователей, кроме пользователя root, не может зарегистрироваться.
Если данная система не поддерживает метод nologin, не все потеряно — можно создать подобный метод самостоятельно. Ниже показано, как это осуществить на практике.
В файл /etc/profile помещается следующий код:
if [ -f /etc/nologin ]; then
if [ $LOGNAME != "root" ]; then
echo "Sorry $LOGNAME the system is unavailable at the moment"
exit 1
fi
fi
Теперь, если требуется запретить регистрацию для всех пользователей, за исключением пользователя root, примените команду touch для создания в каталоге /etc файла nologin и удостоверьтесь, что все пользователи имеют право читать этот файл.