2017-10-17 19 views
0

私はメニュースタイルとコマンドラインスイッチスタイルインターフェイスの両方を使用できるbashスクリプトを作成しようとしています。私は、それが単にスクリプトの引数であるかのように、selectのメニューオプションにパラメータを渡す方法があるかどうか疑問に思っていました。例えば、私のスクリプトでは、junk -d file.txtと言って、私のジャンクフォルダに移動するファイルを指定することができます。しかし、ユーザーがパラメータを指定しない場合は、selectオプションを使用する必要があります。すなわち1) move file 2) clear junk folder 3) watch folderなどbashでselectを使用してパラメータを渡す方法

このメニューでは、このオプションを記述してそのオプションに引数を送信できるようにしたいと考えています。 1 filetobemoved.txtのように。私は$OPTARGを、メニューによって呼び出されるメソッドの後に置いてみましたが、これは動作しないようです。

ここではメニューのコードはありますが、私はrecoverメソッドを呼び出して引数(ファイル名)を渡そうとしています。

if (($# == 0)) 
then if (($OPTIND == 1)) 
then select menu_list in list recover delete total watch kill exit 
    do case $menu_list in 
    "list") list;; 
    "recover") recover $GETOPT;; 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
    done 
fi 

ありがとうございました。

答えて

0

ケースを実行するコードを関数に挿入します。コマンドラインオプションを確認してselectをスキップして、関数を呼び出すだけです。

do_command() { 
    case "$1" in 
    "list") list;; 
    "recover") recover $GETOPT;; # had -a after recover 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
} 
if (($# == 0)) 
then if (($OPTIND == 1)) 
    then select menu_list in list recover delete total watch kill exit 
     do do_command "$menu_list" 
     done 
    fi 
elif [[ "$1" = "-d" ]] 
then do_command delete 
... 
fi 
関連する問題