私はさまざまな目的でシェルスクリプトを書いています。さまざまな操作は入力パラメータによって異なります。シェルスクリプトを実行するときにどのパラメータが渡されるかを確認するには?
誰かがこのクエリがどのように機能するかを説明できますか? 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+}
組み込み関数です。交換失敗が設定されていない場合、条件が評価され、ループが中断されます。:true
while
$1
false
while
while
ループが繰り返されるたびに成功すると、_fn() echo
esの$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().