2013-10-21 4 views
7

In diesem Skript fand ich diesen if Ausdruck:Was bedeutet der Wert -z in einem if-Ausdruck in einem Linux-Skript?

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

Mein Problem ist, dass ich nicht, was genau bedeutet dieses -z Wert finden.

Aus dem Inhalt des Echos kann ich ableiten, dass (vielleicht) $1 Variable die Softwareversion darstellt. und dass (vielleicht) -z ein ungültiger Wert ist. Wenn ich also das Skript ausführe, ohne ihm die Version der Software zu übergeben, die ich verpacke, drucke mir die korrekte Prozedur, um das Skript auszuführen.

Aber ich bin mir nicht sicher über die wahre Bedeutung der -z Wert.

+1

Als eine Randnotiz sollten Sie wahrscheinlich Ihre Variable in Anführungszeichen einschließen. 'if [-z" $ 1 "];'. Ich kann mich nicht an den genauen Grund erinnern (jemand?), Aber das kann nicht zu unerwünschtem Verhalten in einigen Fällen führen. – aspyct

+0

Ja, @ Antoine_935, es wird problematisch, wenn die Variable ein Leerzeichen enthält. Es wird 'if [-z hallo world]' was 'bash' nicht verstehen kann. – fedorqui

Antwort

14

Von man test:

-z STRING 
      the length of STRING is zero 

So ist die Bedingung:

if [ -z $1 ]; then 

bedeutet "wenn die Variable $ 1 leer ist". Wo $1 ist wahrscheinlich der erste Parameter des Skripts: Wenn Sie es wie ./script <parameter1> <parameter2> ausführen, dann $1=parameter1, $2=parameter2 und so weiter.

+0

Ja, ich denke auch, dass $ 1 der erste Parameter meines Skripts ist, aber ... wo sind die Skript Parameter definiert? Wie kann ich einer Variablen einen Parameter zuordnen? – AndreaNobili

+2

Sie müssen überprüfen, wie das Skript ausgeführt wird. Wenn der Name "meinscript.sh" ist, dann finden Sie irgendwo einen Aufruf './myscript.sh param1 param2 ...' oder '/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

I denken Sie, dass das Skript in der Shell mit diesem Befehl ausgeführt wird: createpkg.sh 2 (das das Paket der 2 Version der Software erstellen) Also wird die $ 1 Variable automatisch auf den ersten Parameterwert (in diesem Fall: 2) begrenzt? – AndreaNobili

3

help test sagt:

String operators: 

    -z STRING  True if string is empty. 

In Ihrem Beispiel würde das Skript Usage: createpkg.sh <rev package> und beendet sich, wenn ein Argument nicht angegeben wurde.

+0

vielleicht meins ist eine dumme Frage aber: Was ist Hilfe-Test? – AndreaNobili

+0

Es ist eine eingebaute Shell. Geben Sie 'type test' ein, um zu bestätigen! – devnull