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

Тейнсли Дэвид

Шрифт:

my_exit {

# my_exit

echo -e "\nReceived interrupt …"

echo "Do you really wish to exit ???"

echo " 1: Yes" echo " 2: No"

echo -n " Your choice [1..2] >"

read ANS

case $ANS in

1) # удаление временных файлов.. и т. д…

exit 1

;;

# не выполняет ничего

;; esac

}

Соответствующий сценарий выглядит так:

$ pg trap4

#!/bin/sh

#trap4

#перехват сигналов 1 2 3 и 15

trap "my_exit" 1 2 3 15

LOOP=0

# временные файлы

HOLD1=/tmp/HOLD1.$$

HOLD2=/tmp/HOLD2.$$

my_exit {

# функция my_exit

echo -e "\nRecieved interrupt…"

echo "Do you wish to really exit ???"

echo " Y: Yes"

echo " N: No"

echo -n " Your choice [Y..N] >"

read ANS

case $ANS in

Y|y) exit 1;; # выход из сценария

N|n) ;; # возврат к обычной обработке

esac

}

# цикл while применяется здесь, например, для просмотра полей

echo -n "Enter your name :"

read NAME

echo -n "Enter your age :"

read AGE

Если при выполнении этого сценария происходит нажатие клавиш [Ctrl+C] в середине поля ввода (сразу после начала ввода имени), то пользователю предоставляется выбор: возвратиться к обычной обработке или выйти из сценария.

$ trap4

Enter your name :David Та

Received interrupt…

Do you really wish to exit ???

1: Yes

2: No

Your choice [1. .2] >2

Enter your age :

26.3.3. Блокировка терминала

Ниже приводится сценарий, в котором предлагается другой путь для перехвата сигналов в функционирующем сценарии. Сценарий lockit блокирует терминал пользователя с помощью командной строки. При этом командная строка помещается в непрерывный цикл while. Команда trap захватывает сигналы 2, 3 и 15. Если пользователь пытается прервать выполнение сценария, отображается сообщение о том, что действия пользователя не были успешными.

При первом обращении к сценарию запрашивается пароль. Для отмены блокировки терминала сведения поступают из устройства /dev/tty, следовательно, отсутствует запрос на разблокировку терминала; нужно просто ввести пароль и нажать клавишу ввода.

Если пользователь забыл пароль, нужно зарегистрироваться на другом терминале и устранить сценарий. Проверка длины пароля не производится, но при желании ее можно установить.

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

$ stty sane

Сценарий имеет вид:

$ pg lockit

#!/bin/sh

#lockit

#перехват сигналов 2 3 и 15

trap "nice_try" 2 3 15

#устройство, на котором выполняется сценарий

TTY=`tty`

nice_try {

# nice_try

echo "Nice try, the terminal stays locked"

}

# сохраните настройки stty, скрытие символов при вводе пароля

SAVEDSTTY=`stty -g`

stty -echo

echo -n "Enter your password to lock $TTY :"

read PASSWORD

clear

while : do

# чтение только из tty !!

read RESPONSE < $TTY

if [ "$RESPONSE"="$PASSWORD" ]; then

# пароль соответствует…разблокировка

echo "unlocking…"

break

fi

#отображение сообщения, если пользователь введет неверный пароль

#или нажмет клавишу ввода

echo "wrong password and terminal is locked.."

done

# восстановление настроек stty stty=$SAVEDSTTY

Вывод сценария lockit:

$ lockit

Enter your password to lock /dev/tty1 :

Затем экран очищается. При нажатии клавиши ввода или наборе неверного пароля сценарии выводит следующие данные:

wrong password and terminal is locked..

Nice try, the terminal stays locked

wrong password and terminal is locked..

Nice try, the terminal stays locked '

wrong password and terminal is locked..

Введите правильный пароль

unlocking… $

Теперь возвращаемся обратно, в командную строку.

  • Читать дальше
  • 1
  • ...
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win