2013-10-21 3 views
7

私はこのif表現を見つけました:Linuxスクリプトのif式の-z値はどういう意味ですか?このスクリプトで

if [ -z $1 ]; then 
    echo "Usage: createpkg.sh <rev package>" 
    exit 
else 
    CURRENT_VERSION=$1 
fi 

私の問題は、私は、まさにこの-z値を意味するものを見つけることができないということです。

エコーの内容から、私は(おそらく)$1変数がソートウェアバージョンを表すと推測できます。 (おそらく)-zは空白値です。だから私はそれを渡さずにスクリプトを実行する場合、私はそれをスクリプトを実行する正しい手順を私に印刷するソフトウェアのバージョンを印刷します。

しかし、-z値の本当の意味についてはわかりません。 man testから

+1

副題として、変数を引用符で囲むことをお勧めします。 'if [-z" $ 1 "];'。私は正確な理由(誰か)を覚えていませんが、そうしないと、場合によっては望ましくない行動を起こす可能性があります。 – aspyct

+0

はい、@ Antoine_935、変数にスペースが含まれていると問題になります。 'bash'が理解できない' if [-z hello world] 'になります。 – fedorqui

答えて

14

-z STRING 
      the length of STRING is zero 

だから、条件: "変数$ 1が空の場合は、"

if [ -z $1 ]; then 

を意味します。ここで$1はおそらくスクリプトの最初のパラメータです:./script <parameter1> <parameter2>のように実行すると、$1=parameter1,$2=parameter2などとなります。

+0

はい、私は$ 1が私のスクリプトのfirsパラメータだと思っていますが...どこでスクリプトパラメータを定義していますか?どのように変数にパラメータを関連付けることができますか? – AndreaNobili

+2

スクリプトの実行方法を確認する必要があります。その名前が "myscript.sh"であれば、 './myscript.sh param1 param2 ...'または '/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

という文字列を見つけることができます。 createpkg.sh 2(ソフトウェアの2バージョンのパッケージを作成する)ので、$ 1変数は自動的に最初のパラメータ値(この場合は:2)にバインドされますか? – AndreaNobili

3

help testが伝え:引数が指定されていなかった場合、あなたの例では

String operators: 

    -z STRING  True if string is empty. 

を、スクリプトがUsage: createpkg.sh <rev package>して終了を印刷します。

+0

多分私のことはばかげた質問ですが、ヘルプテストは何ですか? – AndreaNobili

+0

これはシェルを内蔵しています。確認するには 'type test'と入力してください! – devnull

関連する問題