Linux下Shell編程之必背必記(一)


1.Shell常用特殊變量含義解釋


$# 傳入Shell腳本的參數個數
$? 最後運行命令的結束碼(0表示:成功執行 非0表示:執行過程中出現異常或非正常退出)


狀態碼:
0 命令成功結束
1 通用未知錯誤
2 誤用shell命令
126 命令不可執行
127 沒找到命令
128 無效退出參數
128+x Linux信號x的嚴重錯誤
130 Linux信號2的嚴重錯誤,即命令通過SIGINT(Ctrl+C)終止
255 退出狀態碼越界


$$ Shell本身的PID(即ProcessID)
$! Shell最後運行的後臺ProcessID
$* 所有的參數列表 
$@ 所有的參數列表 沒看出和$*有什麼區別,都是以"$1" "$2" ... "$n"的形式輸出所有參數
$0 Shell本身的文件名
$- 使用Set命令設定的Flag一覽
$1 - $n 添加到Shell的各個參數值,$1是第一個參數、$2是第二個參數...


2.Shell數值、字符串、文件的比較


數值比較:
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
以上長和test命令一起使用,如:
#!/bin/bash
value1=8
if [$value1 -gt 6] 
then
  echo "$value1 is greater than 6"
fi


字符串比較: 
= 等於
!= 不等於
< 小於
> 大於
-n str  檢查str的長度是否非0
-z str  檢查str的長度是否爲0 


文件比較:
-d file 檢查file是否存在並是一個目錄
-e file 檢查file是否存在
-f file 檢查file是否存在並是一個文件
-r file 檢查file是否存在並可讀
-s file 檢查file是否存在並非空
-w file 檢查file是否存在並可寫
-x file 檢查file是否存在並可執行
-O file 檢查file是否存在並屬當前用戶所有
-G file 檢查file是否存在並且默認組與當前用戶相同
file1 -nt file2 檢查file1是否比file2新

file1 -ot file2 檢查file1是否比file2舊


3.Bash Shell提供了兩項可在if - then語句中使用的高級特性

3.1 用於數學表達式的雙括號

               雙括號命令符號:

val++  後增

val-- 後減

++val 先增

--val 先減

! 邏輯求反

~ 位求反

** 冪運算

<< 左位移

>>右位移

& 位布爾和

| 位布爾或

&& 邏輯和

|| 邏輯或

#!/bin/bash

value1=8

if (( $value1 ** 2 > 60 )))

then

(( value2=$value ** 2))

echo " the square of $value1 is $value2 !"

fi

3.2 用於高級字符串處理功能的雙方括號

#!/bin/bash

if [[ $username == bi* ]]

then

echo "hi $username !"

else 

echo "$username is not existed !"

fi

雙方括號提供了test命令未提供的另一個特性,即模式匹配。

雙等號將右邊的字符串 bi* 視爲一個模式,並應用模式匹配規則。上面示例表示雙方括號命令$username環境變量進行匹配,看它是否以字母r開頭,

如果是,執行then後代碼塊,否則執行else後代碼塊。


參考資料 《Linux命令行與shell腳本編程大全(第三版)》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章