0

私はこのようなbashスクリプトを持っています:

usage="setup.sh [-localsource path to dir] [-help]";

 for i in $@
    do
        if [ "$localSourceOpt" = 1 ]
        then
            localSource=$i
            localSourceOpt=0;
        fi
        if [ "$i" = "-localsource" ]
        then
            localSourceOpt=1;
        fi
        if [ "$i" = "-help" ]
        then
            echo "$usage";
            exit;
        fi
    done

これは議論に必要です例えば

setup.sh -localsource PATH 

私が必要としているのは、複数の引数値を持つ可能性のある別の引数を追加することです。

 setup.sh -localsource PATH  -locbranches one two three 

引数「-locbranches」に渡された値をキャプチャするにはどうすればよいですか

前もって感謝します

4

2 に答える 2

0

最も単純なコマンドライン引数メカニズムを処理するには、多くのロジックをコーディングする必要があることに注意してください。代わりに、 bash getopts機能を使用することをお勧めします。

これにより、単一引数オプションの機能が簡単になります。複数の引数の場合はうまく機能せず、引数を引用符で囲む必要があります-option "1 2 3"。ただし、次のシナリオで複数の引数を処理します。

setup.sh -localsource PATH one two three 

つまり、one two threeコマンドラインオプションにリンクされていません。別の方法は、各引数のオプションを指定することです。

setup.sh -localsource PATH -locbranch one -locbranch two -locbranch three
于 2012-12-13T09:20:30.943 に答える
0

4つのケース(-localsource、-locbranches、-help、default)で切り替えを行うことができ、いずれの場合も1つの状態に入る必要があります。

for i in $@; do
  case "$i" in

   "-help") echo "$usage"
            ;;
   "-localsource") STATE="localsource"
                 ;;
   "-locbranches") STATE="locbranches"
                 ;;
   *) 
          if [ "$STATE" == "localsource" ]; then
             PATH=$i
          elif [ "$STATE" == "locbranches"]; then
             # do something with argv from locbrances
          else
             echo "Wrong state!"
          fi
          ;;
  esac
done
于 2012-12-13T09:29:43.873 に答える