Назначение Примеры Скрипт
Используется в файлах сценариев для вывода на экран специального приглашения. Это приглашение позволяет Вам решить, должна ли программа сценария продолжать выполнение.
Синтаксис
choice [текст] [варианты] ... [--help]
Примечания
Первая клавиша, которую вы назначили в качестве варианта, возвращает значение 1, вторая - 2, третья - 3 и так далее. Если вы нажмете клавишу, которой нет среди перечисленных, раздастся звуковое предупреждение.
Если будет обнаружена ошибка, переменная $? установится в значение 255.
Если при нажатии отсутствующей в вариантах клавиши не издаётся звуковой сигнал, тогда наиболее вероятной причиной этого может быть то, что PC Speaker занесен в blacklist, т.е. можно сказать выключен. Проверить это можно так: $ cat /etc/modprobe.d/blacklist.conf | grep pcspkrblacklist pcspkr Чтобы включить PC Speaker, подгрузите модуль "pcspkr": # modprobe pcspkr Теперь можно в виртуальной консоли проверить наличие звука из системного динамика. Для этого перейдите в виртуальную консоль (Ctrl+Alt+F1), войдите под своей учётной записью и нажмите на клавишу <tab>, в ответ вы должны услышать бибикающий сигнал. Так же можно услышать звук на команду: echo -e "\a" Тоже самое можно проделать в графической программе XTerm (или UXTerm). Если в XTerm сигнала из системного динамика нет, тогда включите его по команде: xset b on Если есть желание иметь включенным pcspkr всегда при старте и после перезагрузки системы, то в /etc/modprobe.d/blacklist.conf закомментируйте строчку blacklist pcspkr (поставьте знак # вначале строки).
$ cat /etc/modprobe.d/blacklist.conf | grep pcspkrblacklist pcspkr
# modprobe pcspkr
echo -e "\a"
xset b on
В программе Konsole вышеупомянутые действия (нажатие на клавишу <tab> или команда echo -e "\a") не приводят к воспроизведению звукового сигнала в системном динамике. Однако есть возможность настроить Konsole на воспроизведение звука двумя способами.
Для вывода сигнала через динамики, подключенные к звуковой карте, выберите из меню "Настройка" команду "Настроить уведомления", после чего выберите из списка событий заголовок Сигнал в видимом сеансе. Пометьте "галочкой" опцию "Воспроизвести звук" и справа в строке ввода укажите звуковой файл /usr/share/sounds/ubuntu/stereo/bell.ogg, затем нажмите на Enter или щелкните на OK.
Для того, чтобы Konsole выводил сигнал через системный динамик, необходимо использовать утилиту beep. Установите эту утилиту по команде: sudo apt-get install beep В скрипте choice закомментируйте 44 строку: echo -en "\a" и раскомментируйте строку 45: # beep После этих действий скрипт choice для воспроизведения звукового сигнала будет использовать утилиту beep.
sudo apt-get install beep
echo -en "\a"
# beep
Примеры
Что появится на экране при использовании команды CHOICE в файле сценария:
Если вы ввели в файле сценария команду choice "(Да-1, Нет-0) -?" 1 0 то при запуске этого файла вы увидите следующее сообщение: (Да-1, Нет-0) -? Использование команды CHOICE в программе сценария:
choice "(Да-1, Нет-0) -?" 1 0
(Да-1, Нет-0) -?
Ниже приведен список программ сценариев, использующих команду CHOICE. В качестве наглядного примера небольшой фрагмент из программы showstat: for i in ${notinstalledpackage[*]} do echo; echo "Хотите установить пакет $i?" choice "(Да-1, Нет-0) -?" 1 0 if [ "$?" -eq "1" ] then packages[$j]=$i let "j += 1" fi done Данный фрагмент выполняет копирование имен неустановленных пакетов из массива notinstalledpackage в массив packages с предварительным выводом запроса на подтверждение.
for i in ${notinstalledpackage[*]} do echo; echo "Хотите установить пакет $i?" choice "(Да-1, Нет-0) -?" 1 0 if [ "$?" -eq "1" ] then packages[$j]=$i let "j += 1" fi done
Сценарии, использующие команду CHOICE
Скрипт
#!/bin/bash#Предлагает Вам выбрать значение из набора вариантов. Ждет,#пока Вы сделаете выбор, нажав клавишу, и выдает звуковой #сигнал при нажатии клавиши, которой нет среди допустимых #вариантов. if [ "$1" = "--help" ]then cat <<End-of-messageОжидает ответа пользователя.`basename $0` [текст] [варианты] ...варианты Варианты ответа пользователя. текст Строка приглашенияПосле выполнения команды переменная \$? приобретает значение, равное номеру выбранного варианта ответа.End-of-message exit 0fiecho -en "$1"shiftwhile [ $? -eq 0 ]do index=0 read -s -n1 for par in $* do let "index+=1" if [ "$REPLY" = "$par" ] then if [ "$par" != $'\033' ] then echo $par else echo fi exit $index fi done#звуковое предупреждение echo -en "\a" #сигнал# beep #если сигнала нет, тогда попробуйте утилиту beepdoneexit 255
Подробнее о форматировании
Отправить комментарий