Как выйти из избранных в Linux - PullRequest
0 голосов
/ 15 марта 2011

Я хочу получить ввод от пользователя, который может быть любой из указанных опций, я попытался использовать select , но он просто зацикливается, не выходит, есть ли способя могу заставить его выйти и продолжить после того, как пользователь ввел правильную опцию, вот пример кода:

select envir in "prod" "uat" "dev"; do
    echo $envir
done

//continue with the script
echo "out of select"

Как только пользователь выбирает любую из доступных опций, он должен выйти и продолжить со скриптами, если пользователь ввел что-то еще, он должен продолжать запрашивать.

Ответы [ 4 ]

3 голосов
/ 15 марта 2011
select envir in "prod" "uat" "dev"; do
    echo $envir
    if [ $envir == "prod" ] || [ $envir == "uat" ] || [ $envir == "dev" ]
    then
        break
    fi
done

//continue with the script
echo "out of select"
2 голосов
/ 15 марта 2011

Со страницы руководства bash (1):

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

Другими словами, выполнить оператор "break", когда $ envir непусто.

1 голос
/ 16 марта 2011

Я бы написал скрипт выше:

#!/bin/bash
declare -a opts=("prod" "uat" "dev")

echo "control-D to exit"
select envir in "${opts[@]}"; do
    echo "envir=$envir"
    found=0
    for elem in "${opts[@]}"; do
       if [ "$elem" = "$envir" ]; then
          found=1
          break
       fi
    done
    if [ "$found" -eq 1 ]; then
       break
    fi
done

echo "out of select"

Таким образом, ваши ключевые слова обрабатываются в одном месте. Каждый раз, когда вы добавляете новое слово в список «prod», «uat», «dev», вам не нужно менять его в 2 местах.

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

0 голосов
/ 17 марта 2011

Спасибо, Брайан.С вашим вкладом вот что я смог сделать:

select envir in "prod" "uat" "dev"; do
    echo $envir
    if [ "$envir" != "" ]
    then
        break
    fi
done

//continue with the script
echo "out of select"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...