2013-10-21 9 views
7

In questo script ho trovato questo if espressione:Cosa significa il valore -z in un'espressione if su uno script Linux?

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

mio problema è che non riesco a trovare che cosa significa esattamente questo valore -z.

Dal contenuto dell'eco posso dedurre che (forse) la variabile $1 rappresenta la versione del sotware. e quello (forse) -z è un valore nullo. Quindi se eseguo lo script senza passare ad esso la versione del software che vorrei impacchettare, stampami la procedura corretta per eseguire lo script.

Ma non sono sicuro del vero significato del valore -z.

+1

Come nota a margine, probabilmente si dovrebbe racchiudere la variabile tra virgolette. 'if [-z" $ 1 "];'. Non ricordo il motivo esatto (qualcuno?), Ma in alcuni casi non può comportare comportamenti indesiderati. – aspyct

+0

Sì, @ Antoine_935, sarà problematico se la variabile contiene uno spazio. Diventerà 'if [-z hello world]' che 'bash' non sarà in grado di capire. – fedorqui

risposta

14

Da man test:

-z STRING 
      the length of STRING is zero 

Quindi la condizione:

if [ -z $1 ]; then 

significa "se la variabile $ 1 è vuota". Dove $1 è probabilmente il primo parametro dello script: se lo si esegue come ./script <parameter1> <parameter2>, quindi $1=parameter1, $2=parameter2 e così via.

+0

Sì, penso anche che $ 1 sia il parametro principale del mio script ma ... dove sono definiti i parametri dello script? come posso associare un parametro a una variabile? – AndreaNobili

+2

Devi controllare come viene eseguito lo script. Se il suo nome è "myscript.sh", allora da qualche parte si troverà una chiamata './myscript.sh param1 param2 ...' o '/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

I pensa che lo script sia eseguito nella shell con questo comando: createpkg.sh 2 (che crea il pacchetto della versione 2 del sofware) Quindi la variabile $ 1 viene automaticamente limitata al primo valore del parametro (in questo caso: 2)? – AndreaNobili

3

help test dice:

String operators: 

    -z STRING  True if string is empty. 

Nel tuo esempio, lo script sarebbe stampare Usage: createpkg.sh <rev package> e uscire se un argomento non è stato fornito.

+0

forse la mia è una domanda stupida ma: che cos'è il test di aiuto? – AndreaNobili

+0

È un built-in di shell. Digitare 'test di tipo' per verificare! – devnull