bash Shell 總結《二》
1. 命令的退出狀態 (1), (kw: EXIT STATUS)
每一個命令都有一個退出狀態,用一個非負的整數表示
狀態碼0 表示命令運行沒有出錯
非零狀態碼表示命令出錯
狀態碼的範圍是0-255
命令的退出狀態常用於流程控制結構中的條件判斷
2. 條件表達式 (2), (kw: CONDITIONAL EXPRESSIONS)
復合命令 [[,內部命令 test 和 [,使用條件表達式來測試文件的屬性和狀態,做字符串比較和算術比較。
形式一:[[ expression ]] 支持正則 [[ good =~ ^g ]]
形式二: [ expression ]
形式三: test expression
邏輯操作符,按優先級從高到低:
!: 非
-a: 與
-o: 或
獲取幫助信息:help [[, help test
3. 流程控制 (2), (kw: Compound Commands)
if 分支結構語句,根據條件判斷命令的返回值選擇運行的代碼
if COMMANDS; then
COMMANDS
elif COMMANDS; then
COMMANDS
else
COMMANDS
fi
獲取幫助 help if
case case只能等於變量
case 語句也是分支語句,在需要做多條件判斷的場合可以替代if語句,是得代碼更加簡潔
case $word in
pattern1) COMMANDS;;
pattern2) COMMANDS;;
*) COMMANDS;;
esac
獲取幫助 help case
while 語句用於循環結構,只要條件判斷命令返回0,循環都會一直執行
while COMMANDS
do
COMMANDS
done
獲取幫助: help while
for 用於循環結構,每次循環時依次從列表中取一個字符串,當無法從列表中再取到字符串時,循環終止
for NAME in WORDS
do
COMMANDS
done
獲取幫助信息:help for
例如:
遍歷文件名/字符串
continue, break
continue命令終止當次循環,開始下一輪循環
break敏兩個終止整個循環結構
help continue ,help break
4. 函數 (2), (kw: FUNCTIONS)
可以把函數想象成腳本中的小腳本。
1. 代碼重用
2. 接受參數
3. 有返回值
4. local命令設定只在函數內部使用的變量
5. return 退出函數
6. 位置參數$0與腳本的$0相同
6. 函數庫與source 命令
7. export 導出函數給子shell使用
5. 信號 (1), (kw: SIGNALS)
信號是進程間通信的一種方式
1. kill命令給進程發信號
2. trap命令捕捉信息 SIGKILL和SIGSTOP無法捕捉,未捕捉的信息通常會使進程終止
CTRL-C <-- 給前臺進程組發SIGINT
CTRL-Z <-- 給前臺進程組發SIGTSTP
CTRL-\ <-- 給前臺進程組發SIGQUIT
CTRL-D <-- 輸出一個EOF 字符
6. 文本處理 (4)
1. 常用文本處理命令:
cat head tail grep sed awk
cut wc sort uniq tr tac rev
2. 正則表達式常用於文本處理中,支持做更復雜,更高效的文本處理操作
3. 文本處理性能比較
1. 搜索
2. 替換
3. 截取
調試代碼:bash -x
托管代碼:git
locate -c -m
7. 實例講解 (6)
1. 腳本範例解析
2. 腳本書寫
1. 命令行參數處理
2. 運行環境檢查(權限,標記等)
3. 規範錯誤碼
4. 記錄日誌
5. 模塊化編程 (函數,變量)
6. 代碼對齊與代碼風格
7. 代碼註釋
8. 代碼性能
1. 內部命令與外部命令的選擇
2. 並發,等待,同步 (flock)
9. 代碼調試 (bash -x, bash -n)
10. 版本管理 (git, svn, cvs)
3. 項目示範
寫一個程序,實現以下功能
1. 檢查遠程服務器上的httpd 服務是否正常工作,
並記錄檢查結果
2. 提供增加,查看,修改,刪除的功能
3. 只有root 用戶才能寫入檢查記錄,其他人可以查詢
4. 避免多個進程同時寫檢查記錄,
如果出現寫沖突,
應該返回相應的錯誤碼
5. 除了記錄檢查記錄之外,程序還應該對每次運行,
每次錯誤做記錄
bash Shell 總結《二》