2013-10-21 21 views
7

bu if ifadelerinde bulundu:Linux komut dosyasında bir ifadede -z değeri nedir? Bu komut

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

Sorunum tam olarak bu -z değeri ne anlama geldiğini bulamıyorum olmasıdır.

Yankı içeriğinden (belki) $1 değişkeninin sotware sürümünü temsil ettiğini düşebiliriz. ve bu (belki) -z bir boş değerdir. Bu yüzden, komut dosyasını, paketleyeceğim yazılımın sürümüne geçmeden yürütürsem, betiği yürütmek için doğru prosedürü yazdırayım.

Ancak, -z değerinin gerçek anlamından emin değilim. man test itibaren

+1

Bir yan not olarak, muhtemelen değişkeninizi tırnak içine almalısınız. eğer [-z "$ 1"]; '. Sebebi tam olarak hatırlamıyorum (birisi?) Fakat bunu yapmamak bazı durumlarda istenmeyen davranışlara neden olabilir. – aspyct

+0

Evet, @ Antoine_935, değişkenin bir boşluk içeriyorsa sorun olacaktır. Bu, "bash" ın anlayamayacağı bir şey olacak. – fedorqui

cevap

14

:

-z STRING 
      the length of STRING is zero 

Yani koşul: "değişkeni $ 1 boşsa"

if [ -z $1 ]; then 

anlamına gelir. $1, komut dosyasının ilk parametresi olabilir: ./script <parameter1> <parameter2>, sonra $1=parameter1, $2=parameter2 vb.

+0

Evet, ayrıca 1 $ 'lık kodumun firs parametresi olduğunu düşünüyorum ama ... script betiği nerede tanımlanır? Bir parametreyi bir değişkenle nasıl ilişkilendirebilirim? – AndreaNobili

+2

Komut dosyasının nasıl yürütüldüğünü kontrol etmeniz gerekiyor. Eğer adı "myscript.sh" ise, bir yerde './myscript.sh param1 param2 ...' veya '/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

betiğin bu komutla kabukta yürütüldüğünü düşünün: createpkg.sh 2 (bu, yazılımın 2 sürümünün paketini oluşturur) Yani $ 1 değişkeni otomatik olarak ilk parametre değerine sınırlanır (bu durumda: 2)? – AndreaNobili

3

help test söyler: bir argüman olarak verilmeyen eğer

sizin örnekte
String operators: 

    -z STRING  True if string is empty. 

, senaryo Usage: createpkg.sh <rev package> ve çıkış basacaktır.

+0

belki de benim için aptalca bir soru ama: yardım testi nedir? – AndreaNobili

+0

Bu yerleşik bir kabuktur. Doğrulamak için 'tip testi 'yazın! – devnull

İlgili konular