2017-07-22 9 views
2

私は以前ここに同様の質問を:私は今持っているReturn to previous commands in bash script?[PART 2フォロー]

違いは、私が受け取った答えは部分的にしか機能しています。回答者に連絡しようとしましたが、回答はありませんでした。

とにかく、私はもっと多くのメニューを追加しようとしており、もっと "前の"オプションがあります。たとえば、次のようにしたいと考えています。

while [[ $answer -ne '3' ]];do 
echo "Choose option:" 
echo "1 - Begin" 
echo "2 - Load" 
echo "3 - Exit" 
read -p "Enter Answer [1-2-3]:" answer 
    case "$answer" in 
    1) while [[ "$nm" == '' ]];do read -p "What is your Name:" nm;done # Keep asking for a name if the name is empty == '' 
    if [[ $nm == "prev" ]];then nm=""; else echo "Hello $nm" && break; fi # break command breaks the while wrapper loop 

##Begin my custom code: 

    read -p ""What is your favourite colour?" cr 
    if [[ $cr == "prev" ]];then cr="" # And return to "What is your name" 
    echo "$cr is my favourite, too! 
# And keep going on and on, utilizing the "prev" command to go back to the previous question. 

#End my custom code. 

    ;; 
    2) echo 'Load' ;; 
    3) echo 'exiting...' ;;           # Number 3 causes while to quit. 
    *) echo "invalid selection - try again";;      # Selection out of 1-2-3 , menu reloaded 
esac                 # case closing 
done                 # while closing 
echo "Bye Bye!" 

私はこれを書くのが難しいことをご理解ください。私の上で簡単に行ってください^^;

+0

なぜあなたは別々の機能にあなたのメニューを分割し、いくつかの 'back'または'以前menu'オプションに前のメニュー機能を呼び出すことはありませんか?これは、あなたが複数のメニューインターフェイスで前後に行くことを求めているのでしょうか? – Azeem

+0

そうだと思います。 (申し訳ありませんが、私の英語はそれほど良いものではありません)。たとえば、あなたの好きな色は何ですか? - _prev_あなたの名前は何ですか? - _prev_ 'オプションを選択してください。 ' – leetbacoon

+0

問題はありません。それぞれのメニューは 'mainMenu()'、 'colorsMenu()'、 'infoMenu()'などの別々の関数で分けることができます。そして、関連する関数をメニューに移動できます。 'prev'では、関数を呼び出すだけで簡単になり、関連するオプションが表示されます。わかりましたか? – Azeem

答えて

1

私が正しく理解していれば、あなたはこのようなものを探しています。 私はいくつかの説明コメントを含めました。

begin() { 
    # local variables that should not be visible outside this function 
    local name color 

    while :; do 
     while [[ $name == '' ]]; do 
      read -p "What is your Name:" name 
     done 

     if [[ $name == prev ]]; then 
      # exit function, return to menu 
      return 
     fi 
     echo "Hello $name" 

     read -p "What is your favourite colour?" color 
     if [[ $color == prev ]]; then 
      # clear the current variable, and the previous too, to repeat previous question 
      color= 
      name= 
      continue 
     fi 
     echo "$color is my favourite, too!" 

     # all done here, return to menu 
     return 
    done 
} 

while [[ $answer -ne 3 ]]; do 
    echo "Choose option:" 
    echo "1 - Begin" 
    echo "2 - Load" 
    echo "3 - Exit" 
    read -p "Enter Answer [1-2-3]:" answer 
    case "$answer" in 
     1) begin ;; 
     2) echo 'Load' ;; 
     3) echo 'exiting...' ;; 
     *) echo "invalid selection - try again" ;; 
    esac 
done 
echo "Bye Bye!" 
+0

素晴らしい!ありがとうございました!私はあなたの有益性のために皆さんをアップアップしますが、私が新しいので、投票できません:( – leetbacoon

+0

簡単な質問、私に3番目のオプションがある場合はどうすればいいですか?あなたの犬の名前ですか? 'prev'を使って後方に移動します – leetbacoon

+0

@leetbacoonは' color'を好きですが 'color'と' name'をクリアする代わりに 'dogname'と' color'をクリアします。それ以上のオプションの一般的な規則は、現在の変数と前の変数をクリアすることです。 – janos

関連する問題