1

ループ メニュー スクリプトを作成しようとしていますが、セカンダリ メニューが false になったときに main-while が false に変わります...何を修正する必要があると思いますか?

#!/bin/bash

function f_menu_main () {
  echo "1) option1";
  echo "2) option2";
  echo "3) option3";
  echo "4) option4";
  echo "99) exit";
}

function f_case_main () {
  case $selection0 in
    "1" ) function1; selection0="1"; ;;
    "2" ) function2; selection0="2"; ;;
    "3" ) function3; selection0="3"; ;;
    "4" ) f_run_app packages 1; ;;
    "99" | "q" | "exit" | "quit") selection0="exitl0"; ;;
    *) f_menu_main; ;;
  esac
}

function f_case_packages () {
  case $selection1 in
    "1" ) function1; selection1="1"; ;;
    "2" ) function2; selection1="2"; ;;
    "99" | "q" | "exitl" | "quit") selection1="exitl1"; ;;
    *) f_menu_packages; ;;
  esac
}

function f_menu_packages () {
  echo "1)  options";
  echo "2) options";
  echo "99) exit";
}

function f_run_app () {
  selection="selection"$2;
  exitlv="exitl"$2;
  while [ "${!selection}" != "$exitlv" ]; do
    echo "";
    f_menu_$1;
    echo "Last selection: \""${!selection}" "$2"\".";
    echo -n "Select a item from menu: "; read "selection"$2;
    f_case_$1;
  done
}

f_run_app main 0;

私の推測は、selection1がexit1 while1 exitですが、while0も終了し、変数selection0がexit0ではない場合です。

4

1 に答える 1

1

変数をローカル コンテキストに配置してみて、それが役立つかどうかを確認してください。サブコールはおそらくそれを変更し、終了後に元の値に戻しません。

function f_run_app () {
  local selection="selection"$2;
  local exitlv="exitl"$2;
  while [ "${!selection}" != "$exitlv" ]; do
    echo "";
    f_menu_$1;
    echo "Last selection: \""${!selection}" "$2"\".";
    echo -n "Select a item from menu: "; read "selection"$2;
    f_case_$1;
  done
}
于 2013-09-13T20:49:32.640 に答える