2013-10-21 140 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值的真正含義。

+1

作爲一個方面說明,你應該把你的變量放在引號中。 '如果[-z「$ 1」];'。我不記得確切的原因(某人?),但不這樣做可能會在某些情況下導致不需要的行爲。 – aspyct

+0

是的,@ Antoine_935,如果變量包含空格,將會出現問題。它會變成'如果[-z你好世界]''bash'將無法理解。 – fedorqui

回答

14

man test

-z STRING 
      the length of STRING is zero 

所以條件:

if [ -z $1 ]; then 

的意思是 「如果變量$ 1是空的」。其中$1可能是該腳本的第一個參數:如果您執行它,如./script <parameter1> <parameter2>,然後$1=parameter1$2=parameter2等等。

+0

是的,我也認爲$ 1是我的腳本的第一個參數,但是...在哪裏定義腳本參數?我怎樣才能將一個參數關聯到一個變量? – AndreaNobili

+2

您必須檢查腳本是如何執行的。如果它的名字是「myscript.sh」,那麼你會在某處找到一個調用'./myscript.sh param1 param2 ...'或'/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

I認爲腳本是在shell中使用以下命令執行的: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

相關問題