Method of maintaining read variable during while loop

After "Enter server name" and setting the $servselect variable in the script below the variable is lost after the "Hello" and "Goodbye" options are selected. This requires completing "Enter server name" prompt again. Is there a way to maintain that variable until the script completely exits? Any advice would be greatly appreciated.

#!/bin/bash
#
while true; do
    read -p "Enter server name: " servselect
    servselect=${servselect:-servselect}
    echo $servselect has been selected!

    printf '%s\n' \
        "" \
        "[A] Hello" \
        "[B] Goodbye" \
        "[Q] Quit" \
        ""
        read -n1 -p 'Enter response here:' response
        case $response in
            [Aa]* )
                printf '%s\n' \
                    "" \
                    "Hello, $servselect" \
                    ""
                    ;;
            [Bb]* )
                printf '%s\n' \
                    "" \
                    "Goodbye, $servselect" \
                    ""
                    ;;
            [Qq]* )
                printf '%s\n' \
                    "" \
                    "Quitting..." \
                    ""
                    break
                    ;;
            * )
                printf '%s\n' \
                    "" \
                    "Please choose A, B, or Q" \
                    ""
                    ;;
        esac
done
0
задан 4 July 2017 в 02:22
1 ответ

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

У меня было бы два цикла - один для запроса имени сервера и продолжения запроса до тех пор, пока не появится допустимое значение предоставляется, а затем один для выполнения варианта A или B или выхода.

Для вопросов, связанных с чистым программированием, таких как этот, вам может быть лучше задать на stackexchange

3
ответ дан 4 December 2019 в 12:19

Теги

Похожие вопросы