shell指令碼程式設計續---分支語句
if語句做條件判斷
單分支:
if 判斷條件;then
statement1
statement2
fi
雙分支:
if 判斷條件;then
statement1
statement2
else
statement3
fi
多分支if語句:
if 判斷條件1;then
statement1
elif 判斷條件2;then
statement2
elif 判斷條件3;then
statement3
else
statement4
fi
If語句新增使用者例子:
If語句中若命令正常進行,則條件為真,即命令退出狀態嗎為零。
注意:
if [ `id -u $NAME` -eq 0 ] 是比較命令執行的結果是否為 0,即判斷使用者的 UID 是否為0
if[ id $NAME &>/dev/null ] 是用命令的執行狀態是否成功(表示命令是否成功執行,不 關係其輸出結果),即判斷使用者是否存在
例子:
判斷系統中是否有shell為bash的使用者,並顯示有幾個這樣的使用者
注意:第二行、第三行,獲取命令的執行狀態,若執行狀態成功則表示有該使用者存在;
第六行是獲取命令的執行結果,即統計出有多少個這樣的使用者。
練習:
給定一個檔案,判斷這個檔案是否有空白行,如果有,則顯示空白行的行數,否則顯示 “no blank line
shell 中如何進行算術運算
1. let 算術運算表示式
Let C=$A+$B
2. $[算術運算表示式]
D=$[$A+$B]
3.$((算術運算表示式))
C=$(($A+$B))
4. expr 算術運算表示式,表示式和操作符之前要有空格
C=`expr $A + $B`
exit:退出指令碼
exit # (#為0-255,0 表示指令碼成功執行)
若直接使用了exit,後邊沒有數字(即退出狀態碼),則該指令碼的退出狀態碼為 exit 這條 語句之前的命令執行的狀態碼
檔案測試:若需要取反,只需要再前面增加”!”即可
-e $FILEPATH:測試檔案是否存在
-f FILE:測試檔案是否為普通檔案
-d FILE:測試指定路徑是否為目錄
-r FILE:測試檔案對當前使用者(執行指令碼的使用者)來講是否可讀
-w FILE:測試檔案對當前使用者來講是否可寫
-x FILE:測試檔案對當前使用者來講是否有執行許可權
如:測試/etc/fstab 是否存在 [ -e /etc/fstab ]
測試/etc/rc.d/rc/sysinit 對當前使用者是否可執行 [ -x /etc/rc.d/rc.sysinit ]
bash :本地變數(區域性變數)--作用域當前的shell程序
環境變數 --作用域當前shell程序及子程序,下面聊聊其他變數型別:特殊變數,位置變數
位置變數:
$1,$2,$3..... 引用指令碼的幾個引數
shift:輪換,輪替。當引數過多的時候,不可引用$100,這樣太麻煩。所以使用shift踢掉前一個引數,使用一個引數踢掉 一個引數,shift n表示一次踢掉n個引數,預設為1。
特殊變數:$?:命令執行的狀態碼
$# :指令碼引數的個數
$0 :指令碼本身
$* :引數列表
[email protected] :引數列表 但與$*有所不同,後邊會講
$$ :指令碼的 PID