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腳本編程大全(第三版)》