シェルスクリプトを実行するための入力パラメータを確認する方法

シェルスクリプトを実行するための入力パラメータを確認する方法

私はさまざまな目的でシェルスクリプトを書いています。さまざまな操作は入力パラメータによって異なります。シェルスクリプトを実行するときにどのパラメータが渡されるかを確認するには?

誰かがこのクエリがどのように機能するかを説明できますか? 1つの入力パラメータを使用する1つのシェルスクリプトがあり、abc.shその値に応じてシェルスクリプトが操作を実行または実行しないことを前提としています。入力パラメータとして「1」を渡して実行をスケジュールしたとします。シェルスクリプトの実行時にパラメータ値をどのようにテストしますか?

答え1

_fn() { set -- "$@" $(cat)
    while ${1+:} false ; do 
        echo "$1" && [ "$1" = "arg2" ] && echo "$1"
        $YOUR_CHK
        shift
    done
}

echo "arg2" | _fn "arg1"

出力

arg1
arg2
arg2

cmd行パラメータを処理し、パラメータ配列に1つ以上のパラメータが格納されていることを確認するためにループのみをstdin実行します。whileチェックするすべてのパラメータを削除するので、$YOUR_CHK貴重な情報を何とか保存することがその一部である必要があります。

_fn内容がスクリプト本体またはシェル関数型の場合、動作は同じです。

_fn処理stdin- この場合、最初の行の - または - は、位置引数シェル配列をコマンドラインに渡された値に設定することでオーバーライドされ、"arg2" echoすべて|pipeが吐き出されます。set$@"$@"cat$(command substitution)

while _fn's $1最初のパラメータは、ループ条件を満たすために置き換えるシェルの${set+}組み込み関数です。交換失敗が設定されていない場合、条件が評価され、ループが中断されます。:truewhile$1falsewhile

whileループが繰り返されるたびに成功すると、_fn() echoesの$1最初のパラメータは次のようになります&&echoいつも成功) 文字列と同じであることを[ tests ]確認し、 es が再び成功した場合に確認します。$1"arg2" &&[ test ]_fn() echo$1

$YOUR_CHK動作しません。シェルがコードを実行する前に null と評価される未設定変数。

ループが繰り返されるたびに最初の引数をwhile削除shiftします。$1したがって、繰り返し1では次の"$@"ようになります。

arg1 arg2

しかしshift、最初以降は次のようになります。

arg2

最後の時間以降はshift次のようになりました。

${1+:} falseこれでリセットされていないため、$1シェルは交換されず、評価:trueのみが実行されるため、ループはfalse中断され終了します。while_fn().

関連情報