基礎知識
shell執行方式 sh xx.sh (檔案須有r許可權) || ./xx.sh (檔案須有x許可權) 註:sh xx.sh方式比較安全
檔案名稱尾碼 .sh
shell內容開頭 #!/bin/bash || #!/bin/sh || #!/bin/csh || #!/bin/ksh 註:#!/bin/bash 使用比較多
退出 exit 0
變數賦值與使用
不需要定義即可直接使用 註:變數賦值時=號兩端不能有空格
以$變數名或${變數名}訪問變數內容
流程式控制制
判斷 註:確保方括弧的空格 ; 確定每個條件都有then
複製代碼 代碼如下:
if [ –d ‘dirname' ];then
命令集1
elif 條件2;then
命令集2
else
命令集4
fi
複製代碼 代碼如下:
case $變數 in
match_1 )
命令集1
;;
match_2)
命令集2
;;
……
*)(可選)
命令集n
;;
esac
迴圈
1.while 條件
複製代碼 代碼如下:
2.until 條件
複製代碼 代碼如下:
do
命令集
done
3.for ((初始值;條件;步進))
複製代碼 代碼如下:
do
命令集
done
4.for 迴圈變數 in 變數列表
複製代碼 代碼如下:
do
命令集
done
常用判斷條件陳述式
判斷檔案類型
測試標誌 語義 舉例
-e “檔案或目錄”是否存在 test –e $file_name
-f “檔案或目錄”是否存在且為檔案 test –f $file_name
-d “檔案或目錄”是否存在且為目錄 test –d “/boot”
-b “檔案或目錄”存在且為塊裝置 test –b “/dev/sda1”
-c “檔案或目錄”存在且為字裝置 test –c “/dev/tty0”
-S “檔案或目錄”存在且為Socket檔案 test –S “/var/run/rpcbind.sock”
-p “檔案或目錄”存在且為FIFO檔案 test –p $file_name
-L “檔案或目錄”存在且為連結檔案 test –L $file_name
判斷檔案許可權
測試標誌 語義
-r “檔案或目錄”是否存在且具有可讀許可權
-w “檔案或目錄”是否存在且具有可寫入權限
-x “檔案或目錄”是否存在且具有可執行許可權
-u “檔案或目錄”存在且具有SUID的屬性
-g “檔案或目錄”存在且具有SGID的屬性
-k “檔案或目錄”存在且具有Sticky bit的屬性
-s “檔案或目錄”存在且為非空檔案
檔案之間比較
測試標誌 語義
-nt “檔案名稱1”是否比”檔案名稱2”新 (newer than)
-ot “檔案名稱1”是否比”檔案名稱2”舊(older than)
-ef 判斷”檔案名稱1”和”檔案名稱2”是否為同一個檔案,主要用來判斷永久連結,即兩個檔案是否指向同一個inode節點
整數之間比較
測試標誌 語義
-eq 兩數相等(equal)
-ne 兩數不等(not equal)
-gt 整數1大於整數2(greater than)
-lt 整數1小於整數2(less than)
-ge 整數1大於等於整數2(greater than or equal)
-le 整數1小於等於整數2(less than or equal)
與、或、非
測試標誌 語義
-a (and) 兩個條件同時成立則返回true test –e file1 –a –d file2
-o (or)兩個條件任意一個成立則返回true test –r file1 –o –x file2
! (非)當前條件取非 test ! –d file1
控制結構
計算整數變數值
expr 註: 運算子號和參數之間要有空格分開;萬用字元號(*),在作為乘法運算子時要用\;
let 例子:let s=(2+3)*4