Сценарий deleteuser преднамеренно был создан неполным. Вы должны решить, что делать с файлами, принадлежащими удаляемой учетной записи: сжать их и поместить в архив, записать на ленту, скопировать в облачное хранилище, сохранить на DVD или даже послать их по почте прямо в ФБР (в последнем случае мы просто пошутили). Кроме всего прочего упоминание об учетной записи необходимо удалить из файла
Другим полезным усовершенствованием стала бы реализация пробного режима, чтобы иметь возможность посмотреть, что будет удалено из системы перед тем, как действительно удалить учетную запись.
№ 43. Проверка пользовательского окружения
Переходя из системы в систему, люди обычно переносят свои файлы с настройками окружения, из-за чего эти настройки нередко оказываются недействительными; в конечном итоге в переменной PATH могут оказаться каталоги, фактически отсутствующие в системе, переменная PAGER может ссылаться на несуществующую программу, и так далее.
Сложное решение — сначала проверить переменную PATH, чтобы гарантировать присутствие в ней только допустимых каталогов, а затем проверить все настройки важнейших вспомогательных программ и убедиться, что полные пути указывают на существующие файлы или что эти файлы находятся в каталогах, перечисленных в PATH. Задачу решает сценарий в листинге 5.21.
Код
Листинг 5.21. Сценарий validator
··#!/bin/bash
··# validator — проверяет допустимость каталогов в переменной PATH
··#·· и затем проверяет допустимость всех остальных переменных окружения.
··#·· Проверяются переменные SHELL, HOME, PATH, EDITOR, MAIL и PAGER.
··errors=0
··{
····varname=$1
····varvalue=$2
····if [! -z $varvalue]; then
········if [! -x $varvalue]; then
··········echo "** $varname set to $varvalue, but I cannot find executable."
··········((errors++))
········fi
······else
········if in_path $varvalue $PATH; then
··········echo "** $varname set to $varvalue, but I cannot find it in PATH."
··········errors=$(($errors + 1))
········fi
······fi
····fi
··}
··# НАЧАЛО ОСНОВНОГО СЦЕНАРИЯ
··# =================
····echo "** SHELL set to $SHELL, but I cannot find that executable."
····errors=$(($errors + 1))
··fi
··if [! -d ${HOME:?"You need to have your HOME set to your home directory"}]
··then
····echo "** HOME set to $HOME, but it's not a directory."
····errors=$(($errors + 1))
··fi
··# Первая интересная проверка: все каталоги в PATH допустимы?
··do
····if [! -d $directory]; then
······echo "** PATH contains invalid directory $directory."
······errors=$(($errors + 1))
····fi
··done
··IFS=$oldIFS # Восстановить прежнее значение разделителя полей.
··# Следующие переменные должны содержать полные пути к файлам программ,
··#·· но могут быть не определены или содержать только имена программ.