Читаем Linux и UNIX: программирование в shell. Руководство разработчика. полностью

Следующая функция реализует обобщенный запрос. Пользователь указывает отображаемое сообщение, а также ответ, выбираемый по умолчанию. Ответ, выбираемый по умолчанию, используется в том случае, если пользователь просто нажал клавишу [Return]. Конструкция case применяется для перехвата ответов.

continue_prompt ()

#continue_prompt

#вызов: continue_prompt "отображаемая_строка" ответ_по_умолчанию

{

_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

#если пользователь нажал [Return], устанавливаются настройки

#по умолчанию и определяется возвращаемое значение,

#ниже находится пробел, а затем символ $

: ${_ANS:=S_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 }

Для вызова функции можно указать отображаемое сообщение в двойных кавычках либо вызвать ее вместе с аргументом $1, либо, в крайнем случае, использовать переменную, содержащую строку. Также может передаваться ответ, заданный по умолчанию, в виде 'Y' или 'N'.

Ниже демонстрируется несколько методов, с помощью которых можно вызвать функцию continue_prompt.

if continue_prompt "Do you want to delete the var filesytem" "N"; then

echo "Are you nuts!!"

else

echo "Phew, what a good answer!"

fi

При использовании этого кода можно указывать следующий ввод:

Do you really want to delete the var filesystem [Y..N] [N] :

Phew, what a good answer!

Do you really want to delete the var filesystem [Y..N] [N] :y

Are you nuts!!

Теперь вам понятно, почему функция имеет ответ, заданный по умолчанию. Причем этот ответ может задавать сам пользователь!

Ниже приводится другой способ вызова функции:

#if continue_prompt "Do you really want to print this report" "Y"; then

lpr report

else:

fi

Функцию можно также вызвать с использованием переменной $1, содержащей строку:

if continue_prompt $1 "Y"; then

lpr report

else :

fi

Получение сведений об идентификаторе регистрации

При работе в составе большой системы может возникнуть необходимость связаться с одним из зарегистрированных пользователей. Что делать в том случае, если вы не помните имя пользователя? Часто системные администраторы наблюдают идентификаторы пользователей, блокирующих какие‑либо процессы. Для того чтобы увидеть полное имя пользователя, они должны просмотреть файл passwd с помощью команды grep. И только после этого можно связаться с пользователем, чтобы сделать ему справедливый выговор.

А сейчас мы рассмотрим функцию, которая позволит избежать просмотра файла /etc/passwd с помощью команды grep.

В тестовой системе полное имя пользователя хранится в пятом поле файла passwd; в вашей системе все может быть по–другому, поэтому, возможно, придется изменить номер поля, чтобы обеспечить соответствие с файлом passwd.

Функции передается один либо множество идентификаторов Пользователей, а функция имитирует действие команды grep по отношению к файлу passwd.

Программный код функции:

whois ()

#whois

#вызов: whois идентификатор_пользователя

{

# проверка на наличие корректных параметров

if [ $# -lt 1 ]; then

echo "whois : need user id's please"

return 1

fi

for loop do

_USER_NAME=`grep $LOOP /etc/passwd | awk -F: '(print $4}'`

if [ "$_USER_NAME"="" ]; then

echo "whois: Sorry cannot find $LOOP"

else

echo "$LOOP is $_USER_NAME" fi

done

}

Перейти на страницу:

Похожие книги

112 страниц про Париж. Опыт создания путеводителя (в помощь самостоятельным туристам)
112 страниц про Париж. Опыт создания путеводителя (в помощь самостоятельным туристам)

  По Парижу приятно гулять, бесцельно бродить, кружить по узким улочкам, отдыхать в маленьких кафе и в парках у фонтанов. Здесь есть все для любителей архитектуры, ценителей живописи, театралов, меломанов, гурманов, поклонников всевозможных развлечений. Париж притягивает, удивляет, очаровывает, постепенно приоткрывая тайны любознательному гостю, который теряется от сложности выбора: что же увидеть прямо сейчас, а что отложить на потом. Мои 112 страниц про Париж, надеюсь, помогут сделать этот выбор. Предложенные 7 прогулок по городу включают в себя не только известные всему миру достопримечательности, но и множество других, которые часто остаются за пределами стандартных туристических маршрутов.  

Елена Р Стамбулян , Елена Р. Стамбулян

Руководства / Путеводители / Словари и Энциклопедии
40+. Уход за телом
40+. Уход за телом

Женщина после 40 лет – настоящая богиня, умудренная опытом и оттого еще более прекрасная. Но чтобы надолго сохранить красоту и молодость, нужно постоянно собой заниматься: ухаживать за своим телом, руками и ногами, выполнять физические упражнения и соблюдать диету. Благодаря этой книге вы научитесь самостоятельно готовить омолаживающие, питательные, увлажняющие кремы и маски, а также скрабы и пилинги из натуральных продуктов; выполнять легкие и эффективные упражнения для стройной фигуры и профилактики варикозного расширения вен, делать массаж рук и ног, навсегда избавитесь от целлюлита и сможете легко ориентироваться в выборе омолаживающих процедур в СПА-салонах и хирургических операций в клиниках красоты. Правила здорового питания, популярные диеты и рецепты полезных блюд – в этой книге есть все, что поможет 40-летним женщинам всегда быть в форме.

Анастасия Витальевна Колпакова

Здоровье / Руководства / Здоровье и красота / Дом и досуг / Словари и Энциклопедии