10

Bash スクリプトがあり、それを機能させるには一定数の引数を渡す必要があります。

./upload.sh $ARG1 $ARG2 $ARG3

2 つの必須フィールドが ARG1 と ARG2 であり、
ARG1 と 3 は空ではないとします。

スクリプトが実行され、2 つの必須引数があると思います。ARG2 が見つからない/空であることを検出する方法はありますか? 0 番出口ではなく 1 番出口を返す必要があります。

ここにスクリプトの一部があります

RESOURCE=$1
CONTAINER=$2
APP_NAME=$3

if [[ -z $RESOURCE || -z $CONTAINER ]];
then
    echo `date`" - Missing mandatory arguments: resource and container. "
    echo `date`" - Usage: ./upload.sh  [resource] [container] [appname] . "
    exit 1
fi

前もって感謝します、

アラン

4

5 に答える 5

6

私はいつも小さな関数を使ってすべての引数をチェックします:

process_arguments() {
    while [ -n "$1" ]
    do
        case $1 in
            -h|--help) echo "some usage details"; exit 1;;
            -x) do_something; shift; break;;
            -y) do_something_else; shift; break;;
            *) echo "some usage details"; exit 1;;
        esac
        echo $1; shift
    done
}

このようにして、何かを見逃した場合、適切な使用方法の詳細が表示され、スクリプトが終了します。それ以外の場合は、任意の順序で引数を入力できます。スクリプトが開始したら、呼び出すだけです

process_arguments "$@"

これで準備完了です。

于 2014-09-03T17:52:17.730 に答える
2

ARG2 が見つからない/空であることを検出する方法はありますか?

番号。引数を渡す方法は、引数 1 と 2 として解釈されます。

代わりに次のように言うこともできます:

./upload.sh "$ARG1" "$ARG2" "$ARG3"

引数が空かどうかにかかわらず、bash に引数を正しく解釈させるためです。


例:

$ cat file
[ -z $1 ] && echo "Arg 1 missing"
[ -z $2 ] && echo "Arg 2 missing"
[ -z $3 ] && echo "Arg 3 missing"
$ bash file "$HOME" "$FOOBAR" "$USER"
Arg 2 missing

(上記の例では、変数FOOBARは未定義でした。)

于 2013-11-07T17:35:09.063 に答える
1

使用している引数は位置指定であるため、1 と 3 のみを指定しましたが、1 と 2 が必要です。誤って arg 3 の値を arg 2 として指定しました。

オプションの引数がダッシュ - で始まることを要求できます。$1 または $2 のいずれかがダッシュで始まる場合は、必要な引数が欠落していることがわかります。もちろん、$3 からダッシュを削除する必要があります。

引数を処理するより良い方法は、getoptsを使用することです。開始するためのいくつかのリソースを次に示します。

これにより、標準のコマンドライン ユーティリティと同様の方法で引数を処理できます。コマンドライン ユーティリティを C で記述している場合は、C ライブラリ バージョンの getops を使用したことがあるでしょう。

于 2013-11-07T17:35:16.157 に答える