Shell Script Loop Condicionalmente

2

Eu apenas criei um novo shell script e tive problemas com um pequeno problema. Abaixo está meu script: -

function mainMenu(){
    while :
    do
    echo -e "\nMain Menu:"
    echo " A. Process Managements Utilities"
    echo " B. Memory Managements Utilities"
    echo " C. Exit"

    read -p "Select :" menuSelect
    echo

    case $menuSelect in

            a|A) processMgmt;;
            b|B) memoryMgmt;;
            c|C) exit 0;;

            *)echo "Invalid Input"
              echo
              ;;
    esac
    done
}

Quando o usuário digitar 'INVALID INPUT', a função imprimirá todos os mainMenu() output: -

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit

Select :e
Invalid Input

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit

 Select :

Como imprimir apenas select: se a entrada do usuário for inválida?

Select:e
Invalid input
Select:s
Invalid input
    
por Asif 19.12.2015 / 07:36

1 resposta

5

Como você deseja imprimir informações sobre a escolha A, B etc somente na primeira vez, inicie while loop depois de imprimi-lo :

function mainMenu(){

    echo -e "\nMain Menu:"
    echo " A. Process Managements Utilities"
    echo " B. Memory Managements Utilities"
    echo " C. Exit"

while :
    do

    read -p "Select :" menuSelect
    echo

    case $menuSelect in

            a|A) processMgmt;;
            b|B) memoryMgmt;;
            c|C) exit 0;;

            *)echo "Invalid Input"
              echo
              ;;
    esac
    done
}

Exemplo de saída (que é esperado da pergunta):

Main Menu:
 A. Process Managements Utilities
 B. Memory Managements Utilities
 C. Exit
Select :q

Invalid Input

Select :q

Invalid Input

Por meio disso, as informações sobre a seleção de opções são impressas uma vez quando a função mainMenu é chamada, em seguida, while loop read a entrada e case fazem o trabalho que você deseja. Em caso de entrada inválida , while loop perguntará novamente por read -p "Select" .

Espero que isso ajude

    
por 19.12.2015 / 08:06