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

Если в процессе выполнения цикла while устанавливается искомое соответствие, переменной found присваивается значение "истина". Затем с помощью конструкции case выбираются права доступа. При этом возвращается 1 для обычных прав доступа либо 0 — для расширенных прав доступа.

Когда пользователь приступает к внесению изменений в запись или к удалению записи, выполняется проверка. Этот процесс основывается на коде возврата функции, описанном выше. В приведенном сценарии либо выполняется сортировка файла passwd, либо отображается каталог:

if user_level; then

sort /etc/passwd

else

restrict

fi

Функция restrict просто выводит на экран сообщение о нарушении прав доступа.

Вышеприведенная проверка может быть реализована за один цикл. Однако кодирование выглядит более привлекательно, если применяется метод работы с двумя файлами. В результате значительно облегчается отладка кода.

Чтобы выйти из меню, пользователь выбирает пункт q или Q, в результате чего вызывается функция для очистки экрана. Когда пользователь завершает работу с любым обширным сценарием, очень удобно в этом случае воспользоваться функцией. Это позволяет увеличить количество команд, выполняемых пользователем при завершении работы. Кроме того, значительно улучшается читабельность кода.

Ниже приводится соответствующий сценарий.

$ pg menu2

#!/bin/sh

#menu2

#СЦЕНАРИЙ ГЛАВНОГО МЕНЮ

#игнорирование CTRL‑C и прерывания QUIT

trap "" 2 3 15

MYDATE=`date +%d/%m/%Y`

THIS_HOST=`hostname -s`

USER=`whoami`

#файл, описывающий права доступа пользователя USER_LEVELS=priv.user

#файл для хранения

HOLDl=holdl.$$

#функция задания цвета

colour ()

{

# формат цвет_фона; цвет_переднего_планаm

case $1 in

black_green)

echo '^[[40;32m' ;;

black yellow)

echo '^[[40;33m' ;;

black_white)

echo '^[[40;37m' ;;

Ьlаск_суап)

echo '^[[40;36m' ;;

red_yellow)

echo '^[[41;33m' ;;

esac

}

# чтение значения клавиши

get_char()

(

#get_char

#сохранение текущих установок stty SAVEDSTTY=`stty -g`

stty cbreak

dd if=/dev/tty bs=1 count=1 2> /dev/null

stty -cbreak

# восстановление установок stty

stty $SAVEDSTTY

}

# отображение или сокрытие курсора

cursor ()

{

#cursor

#отображение/сокрытие курсора

_OPT=$1

case $_OPT in

on) echo '^[[?25h';;

off) echo '^[[?251';;

*) return 1;;

esac }

# проверка прав доступа пользователя

restrict ()

{

colour red_yellow

echo -e -n "\n\n\007Sorry you are not authorised to use this function"

colour black_green

}

user_level () {

# user level

# просмотр файла priv.user

while read LINE

do

case $LINE in

# игнорирование комментариев

\#*);;

*) echo $LINE >> $HOLD1 ;;

esac

done < $USER_LEVELS

FOUND=false

while read MENU_USER PRIV

do

if [ "$MENU_USER"="$USER" ]; then

FOUND=true

case $PRIV in

yes|YES)

return 0 ;;

no|NO)

return 1 ;;

esac

else

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

continue

fi

done <$HOLD1

if [ "$FOUND"="false" ]; then

echo "Sorry $USER you have not been authorised to use this menu"

exit 1

fi

}

# вызывается, если пользователь выполняет выход из программы

my_exit()

{

#my_exit

#вызывается, если пользователь выбирает выход из сценария!

colour black_white

cursor on

rm *.$$

exit 0

}

tput init

# отображение на экране уровня доступа пользователя

if user_level; then

ACCESS="Access Mode ls High"

else

ACCES3="Access Mode ls Normal"

fi

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

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

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

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

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

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

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

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

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