1. 程式人生 > >shell指令碼程式設計續---分支語句

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