一、本地變數的使用
本地變數就如同局部變數一樣,只在本SHELL中起作用。它不會影響到其他SHELL中的變數。
1。顯示變數值
可以使用echo命令。需要注意的是,使用變數的時候必須在變數名前加上$符號
2。清除變數
使用unset命令可以清除命令。
3。顯示所有本地SHELL變數
SHELL中預定義了一些環境變數。要想顯示這些命令,可以使用set命令。
另外,使用者自己已經定義過的本地變數也會在其中顯示。
4。測試變數是否已經賦值
${variable:-value}
如果變數已經賦值,則使用該變數值。如果變數為空白,則使用value。需要注意的是,value並不賦給variable。
${variable:=value}
該運算式上面的區別就是,如果variable為空白,則value賦給variable。
如果需要檢驗變數是否為空白,如果為空白的話則顯示帶有系統錯誤資訊,則使用下面的運算式:
${variable:?}
如果需要顯示自己定義的資訊,則如下:
${variable:?"customed message "}
5。設定唯讀變數
使用readonly可以將變數定義成唯讀。
readonly variable
單獨執行readonly可以顯示所有的唯讀變數。
二、環境變數
環境變數用於所有的使用者進程。在Linux中,登陸進程稱為父進程,shell中執行的使用者程式均稱為子進程。環境變數可以在命令列中設定,但使用者登出時這些值將丟失。因此最好在$HOME/目錄下的.profile中定義。傳統上環境變數均為大寫。環境變數應用於使用者進程之前,必須用export命令匯出。設定方法與本地變數設定方法相同。
1。顯示環境變數
使用env命令可以察看所有環境變數
2。潛入SHELL變數
EXINIT儲存使用vi編輯器的初始化選項。比如要顯示行號,則如下:
EXINIT='set nu';export EXINIT
HOME:用於記錄使用者的主目錄;
IFS:用作shell指定的預設域分隔字元。
PATH:儲存進行命令或指令碼尋找的目錄順序。可以在.profile中進行設定。
3。將變數匯出到子進程
在父指令碼中使用export命令可以將變數匯出,這樣子指令碼便可以知道該變數的值。
三、位置變數參數
在向指令碼傳遞參數時,可以使用此位置變數來擷取參數。
他們分別是:
$0:指令碼名字。此變數包含地址,可以使用basename $0獲得指令碼名稱。
$1:第一個參數
$2,$3,$4,$5,...一次類推。
四、特定變數參數
一些指令碼啟動並執行相關控制資訊
$# 傳遞到指令碼的參數個數
$* 以一個單字串顯示所有向指令碼傳遞的參數
$$ 指令碼啟動並執行ID號
$! 後台啟動並執行最後一個進程的ID號
$@ 與$#相同,但是使用時加引號,並在引號中返回每個參數。
$- 顯示shell使用的當前選項。
$? 顯示最後命令的推出狀況。0表示沒有錯誤。
用shell啟動java進程後,獲得進程pid,pid儲存到一個檔案中,關閉時,讀取這個檔案,獲得pid,kill pid.
#!/bin/sh </p><p>SERVER=/home/java/server<br />cd $SERVER </p><p>case "$1" in </p><p> start)<br /> nohup java -Xmx128m -jar server.jar > $SERVER/server.log 2>&1 &<br /> echo $! > $SERVER/server.pid<br /> ;; </p><p> stop)<br /> kill `cat $SERVER/server.pid`<br /> rm -rf $SERVER/server.pid<br /> ;; </p><p> restart)<br /> $0 stop<br /> sleep 1<br /> $0 start<br /> ;; </p><p> *)<br /> echo "Usage: run.sh {start|stop|restart}"<br /> ;; </p><p>esac </p><p>exit 0