shell 編程
1.簡述
利用vi等文字編輯器編寫Shell指令碼的格式是固定的,如下:
#!/bin/bash#commentsYour commands go here
首行中的符號#!告訴系統其後路徑所指定的程式bash即是解釋此指令檔的Shell程式。
除第一行外,以#開頭的行就是注釋行,直到此行的結束。如果一行未完成,可以在行尾加上",這個符號表明下一行與此行會合并為同一行。 2.變數
有環境變數、內部變數、使用者變數。
Shell Script是一種弱類型語言,使用變數的時候無需首先聲明其類型。
variable_name = variable_value
取值的時候要在變數名前加$,$variable_name可以在引號中使用,這一點和其他進階語言是明顯不同的。
特殊變數
$$
Shell本身的PID(ProcessID)
$!
Shell最後啟動並執行後台Process的PID
$?
最後啟動並執行命令的結束代碼(傳回值)
$#
添加到Shell的參數個數
$0
Shell本身的檔案名稱
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
demo:
3.數字比較
-eq equal
-ge greater or equal
-le less or equal
-ne not equal
-gt greater than
-lt less than 4.字串比較
== 是否相等
!= 是否不等
-n 長度是否大於0
-z 長度是否等於0
5.檔案操作符
-d 是否為目錄
-f 是否為檔案
-r 是否可讀
-w 是否可寫
-x 是否可執行 6.邏輯運算子
。 等價c語言 。
-a 等價c語言 &&
-o 等價c語言 || 7.for語句
for current_variable
do
statements
done 8.if語句
if [ expression ] ; then
statements
elif [ expression ] ; then
statements
else
statements
fi
說明:elif或else語句不是必需的。 9.case語句
case str in
str1 | str2)
statements;;
str3|str4)
statements;;
*)
statements;;
esac
說明:*對應C語言的 default; ";;"對應C語言的break。 10. exit語句
退出shell程式並返回一個值,方便被另一個shell調用並給出反饋。 11.函數
func(){
statements
}
12. shell指令碼中執行其他shell指令碼 12.1 直接調用 如 /root/soft/apache-tomcat-8.0.21/bin/shutdown.sh 啟動並執行時候開一個sub-shell執行調用的指令碼,sub-shell執行完畢後返回parent-shell。 sub-shell從parent-shell繼承環境變數,但是sub-shell中的環境變數不會帶回parent-shell。
12.2 exec 如 exec /root/soft/apache-tomcat-8.0.21/bin/shutdown.sh 在當前shell下執行目標指令碼,執行結束後,當前指令碼中exec行之後的內容就不會再執行了。
12.3 source
如 source /root/soft/apache-tomcat-8.0.21/bin/shutdown.sh 或 . /root/soft/apache-tomcat-8.0.21/bin/shutdown.sh
source命令也稱為“點命令”,也就是一個點符號(.),是bash的內部命令。 讀取目標指令碼裡面的語句依次在當前shell裡面執行,沒有建立新的子shell。那麼指令碼裡面所有建立、改變變數的語句都會儲存在當前shell裡面。