shell程式的結束狀態

keeking發表於2010-02-27

        在Unix中,程式結束時會返回一個狀態,這個狀態可以指示程式是否成功執行。如果使用了pipeline,那麼返回的是最後一個程式的狀態。
        我們可以使用$?變數來獲取上一個程式的狀態。例如

$ cp phonebook phone2 
$ echo $? 
0      
         從結果看出cp程式成功執行。
         有了這個,我們就可以使用if語句來控制程式的流程了,如
user="$1" 
 
if who | grep "$user" 
then 
    echo "$user is logged on" 
fi

          這個程式根據傳入的引數來判斷使用者是否登入。這裡直接使用程式的返回值來當判斷條件,我們也可以使用test命令來作為if的條件,test命令回去執行傳入的表示式,返回結果。如test "$name" = julio ;test命令的變數和運算子之間需要空格隔開,這點和變數賦值相反。

          test命令的替代形式是使用中括號,注意中括號前後要有一個空格。如

if [ "$name" = julio ]

then

        echo "Would you like to play a game?"

fi

          [ ]命令提供了一些對整數操作的方法,如下

int1 -eq int2

int1 is equal to int2.

int1 -ge int2

int1 is greater than or equal to int2.

int1 -gt int2

int1 is greater than int2.

int1 -le int2

int1 is less than or equal to int2.

int1 -lt int2

int1 is less than int2.

int1 -ne int2

int1 is not equal to int2.

對檔案操作的方法

-d file

file is a directory.

-e file

file exists.

-f file

file is an ordinary file.

-r file

file is readable by the process.

-s file

file has nonzero length.

-w file

file is writable by the process.

-x file

file is executable.

-L file

file is a symbolic link.

           我們可以在這些操作符前加上一些邏輯操作符來對結果進行邏輯操作,如

!用來對結果取反,[ ! -f "$mailfile" ]
-a 邏輯與,只有當所有結果為真時才返回0,-a的優先順序比整數操作符,字元操作符和檔案操作符的優先順序低,[ -f "$mailfile" -a -r "$mailfile" ]

-o 邏輯或,只要有一個的結果返回真,就返回0,-o的優先順序比-a低,[ -n "$mailopt" -o -r $HOME/mailfile ]

if-else if-else語句結構

if commandl 
then 
        command 
        command 
        ... 
elif command2 
then 
        command 
        command 
        ... 
elif commandn 
then 
        command 
        command 
        ... 
else 
        command 
        command 
        ... 
fi

case語句結構

case value in 
pat1)   command 
       command 
       ... 
       command;; 
pat2)   command 
       command 
       ... 
       command;; 
... 
patn)   command 
       command 
       ... 
       command;; 
esac 

: 命令表示什麼都不做,例如

if grep "^$system" /users/steve/mail/systems > /dev/null 
then 
        : 
else 
        echo "$system is not a valid system" 
        exit 1 
fi 

&&,這個可以用來實現類似if的功能,command1
&& command2,只有當command1返回0時,command2才能執行

||,這個和 &&類似,command1 || command2,只有command1返回非零值時,command2才能執行。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7899089/viewspace-628034/,如需轉載,請註明出處,否則將追究法律責任。

相關文章