2016-03-30 2 views
1

Приветствуем всех и благодарим заранее.Избегайте ошибок ввода пользователем

У меня есть вопрос для вас. В сценарии оболочки, которые я сделал для управления запуском/остановкой кластера приложений JBoss я использую функцию, чтобы ответить на различные вопросы в ходе процесса, который рассказывает WATH сценария, чтобы сделать

function ThreeOptions 
{ 
ACT=0 
read -n 1 -s answ 
case ${answ:0:1} in 
    n|N) echo "Operation skipped" 
     ABRT=2 
    ;; 
    e|E|x|X) echo "Operation aborted" 
     ABRT=3 
     CloseProcedure 
    ;; 
    y|Y|*) echo "...ok..." 
      ACT=1 
    ;; 
esac 
} 

Функции написано таким образом так что одно нажатие буквы выберет опцию, а «Enter/Return» (ну и все остальные клавиши действительно) будет использовать значение по умолчанию.

Как я могу предотвратить считывание команды чтения непреднамеренно двойных/нескольких клавиатурных входов (иначе неряшливых рук).

EX.

echo -en " Shall I close all Jboss processes ? [Y/n/e]: " 
ThreeOptions 
... 
echo -en " Shall I do some other thing?" 
ThreeOptions 
... 

Если я нажимаю «уу» Я заметил, что я ответить на актуальный вопрос и на следующий тоже.

PS: Первый вопрос, так что я надеюсь, что это понятно, и что я не слишком много писать :)

+0

Не можете ли вы просто ** сбросить ** ввод перед печатью опции? например с 'read -t 1 -n 10000 discard'? –

+0

Да ... это было именно то, что я искал! Спасибо большое! Просто добавлено -s, чтобы возможные множественные выходы не отображались на экране читать -t 1 -n 10000 -s discard –

ответ

0

Если вы используете bash вы можете попробовать shell pattern matching в Баш case структуры.

Например использовать +([y])|+([Y])|*) вместо y|Y|*)

Редактировать: не забудьте позвонить shopt -s extglob в функции перед использованием case.

+0

Ум ... Кажется, не работает, мне нужно что-то скрывать? Только с '[y] | + [Y] | *)', кажется, работает без ошибок синтаксиса, но основная проблема остается, нажатие «yyy» фактически даст 3 ответа –

+0

Попробуйте установить 'shopt -s extglob' в перед использованием корпуса – Simone