while [ -n "$1" ];初期ループはいつ実行を開始しますか?

while [ -n "$1" ];初期ループはいつ実行を開始しますか?

whileループで始まるシェルスクリプトがあります

while [ -n "$1" ]; do

私はそれが$1スクリプト名の後ろのパラメータを参照していることを知っています。つまり、firstargumentスクリプトを実行するときです./myscript.sh firstargument。それは何をしますか-n

答え1

-n空でない文字列のテストです。

拡張が空の文字列の場合、"$1"その特定のテストは失敗し、ループは実行されません。

これは可能ループの本文には、shift次の位置引数を移動するステートメントが含まれており、$1この方法で空の引数が見つかるか、引数リストの終わりに達するまでスクリプト引数を繰り返します。

このtestユーティリティは同じです[が、[最後の引数が必要です]

テストは次のように書くこともできます。

while test -n "$1"; do

[そしておそらくtestシェルに組み込まれているが/bin

man testこのテストと他のテストの詳細については、シェルマニュアル(組み込みユーティリティなので)で読むことができます。

今回の-n試験もその一つです。基準テストを実行するので、次の項目にもリストされます。testユーティリティ用POSIX規格


もしこのサイクルは終わらなければなりませんみんな引数が空の場合、これを行わない可能性があるシェルスクリプトの引数:

$ sh -c 'while [ -n "$1" ]; do printf "arg: %s\n" "$1"; shift; done' sh 1 2 3 "" 4 5 6
arg: 1
arg: 2
arg: 3

代わりに、次のようなものを使用する必要があります。

for arg do
    if [ -n "$arg" ]; then
        # do something with "$arg"
    fi
done

...明らかにスクリプトの機能によって異なります。

関連情報