1

次のように呼び出したいbashスクリプトがあります。

bash curl.sh http://www.google.co.uk/ -d Directory -a "Moz 123" -r http://localhost/

次のように、最初の引数 ( http://www.google.co.uk/ )を収集できます。

url=$1
while getopts p:d:a:r: opt; do
case $opt in
    p) proxy=$OPTARG ;;
    d) dir=$OPTARG ;;
    a) ua=$OPTARG ;;
    r) ref=$OPTARG ;;
esac
done

ただし、他の - 引数は取り上げません。最初の引数として ' http://www.google.co.uk/ 'を削除すると、-arguments が取得されます。

ロジスティクスのため、最初の引数を設定することができませ

これをどのように機能させるのですか?

4

3 に答える 3

5

引数を引用符で囲んで渡さないのはなぜですか?

例えば

script.shl "http://www.google.com" "/var/www/test" "option 3"

...その後、$1 $2 $3 を使用して、スクリプトで直接アクセスできます。if...else? を使用するだけで、スクリプトのコースを変更できます。

あなたの質問を読み違えていない限り...

于 2014-03-01T22:04:24.407 に答える
3

getoptsハイフンで始まらない引数を見つけるとすぐに解析を停止します。getopt引数を渡す順序を変更するか、オプションと混合された通常の引数を処理できる外部プログラムの GNU バージョンを使用する必要があります。

以下はうまくいくはずだと思います(あなたのコードとhttp://linuxaria.com/howto/parse-options-in-your-bash-script-with-getopt?lang=enの例をモデルにしています)。基本的にgetopt、引数を並べ替えて、結合オプションを分割するだけです ( に変更-xyzするなど-x -y -z)。オプションではない引数は--、解析されたオプション リストの後にあります。

PARSED_OPTIONS=$( getopt -o "p:d:a:r:" -- "$@" )
eval set -- "$PARSED_OPTIONS"
while true; do
    case $1 in
        p) proxy=$2; shift 2 ;;
        d) dir=$2; shift 2 ;;
        a) ua=$2; shift 2 ;;
        r) ref=$2; shift 2;;
        --) shift; break ;;
    esac
done
于 2014-03-01T22:00:54.530 に答える
1

私の場合、これが最良の選択肢のようです:

次のようにスクリプトを呼び出します。

bash curl.sh -d Remote -a "Moz 123" -r http://localhost http://www.google.com/

次のように最後の引数を取得できます。

url=${!#}

そして、上記のように、getopts を使用したその他のオプション。

于 2014-03-01T22:09:05.743 に答える