1.bash和source的區別:bash(包括通過路徑執行腳本)是non-login狀態下,創建子shell進程,執行的shell腳本,因此其間創建的任何變量都將在程序執行完畢後,銷毀,即父進程(原來的shell)是無法訪問這些變量的;source則直接在當前shell環境下執行該shell腳本,因此腳本申請的變量可以被訪問。
2.test -e filename:關於某個檔名的文件類型的判斷,參數:
1)-e:是否存在
2)-f:是否存在且為文本檔案
3)-d:是否存在且為目錄
4)-b:是否存在且為block device
5)-c:是否存在且為character device
6)-S:是否存在且為Socket檔案
7)-p:是否存在且為FIFO(pipe)檔案
8)-L:是否存在且為一個鏈接檔
test -r filename:關於檔案權限的偵測,參數
1)-r:是否存在且有可讀權限
2)-w:是否存在且有可寫權限
3)-x:是否存在且有可執行權限
4)-u:是否存在且有SUID權限
5)-g:是否存在且有SGID權限
6)-k:是否存在且有Sticky bit權限
7)-s是否存在且為非空白文檔
test file1 -nt file2:兩個檔案之間的比較
1)-nt:file1是否比file2文件新
2)-ot:file1是否比file2文件舊
3)-ef:file1與file2是否為同一個檔案,可用在判斷hard link的判定上,主要意義在判定,兩個檔案是否均指向同一個inode。
test n1 -eq n2:兩個整數之間的判斷
1)-eq:兩數相等
2)-ne:兩數值不等
3)gt:n1大於n2
4)lt:n1小於n2
5)ge:n1大於等於n2
6)le:n1小於等於n2
判定字符串數據
1)test -z string:判定字符串是否為空,空,則為true
2)test -n string:判定字符串是否非空,非空為true
3)test str1=str2:判斷str1是否等於str2,相等則為true
4)test str1!=str2:判斷str1是否不等於str2,不等則true
多重條件判定,test -r filename -a -x filename
1)-a:and,兩個同時成立返回true
2)-o:or,任何一同成立
3)!:取反,即不成立返回true
3.在腳本當中可以用[]來實現test的功能,不過需要注意,[]中的的內部兩端必須有空格,另外:
1)在中括號內的每個組件都需要空格來分割
2)在中括號內的變量,最好以雙引號括起來
3)在中括號內的常量最好以單或雙引號括起來
中括號常用於條件判斷語句中
4.shell腳本中的一些特殊變量
1)$#:代表後接的參數的個數
2)$@:代表"$1 $2 $3 $4"
3)$*:代表"$1c$2c$3c$4",其中c為分隔符
4)$n:代表第n個參數
5.shift n:參數變量偏移,即拿掉前面的幾個參數,然後對應的參數也做相應的變化。
6.條件判斷:
if[ 條件判斷1 ]&&[ 條件判斷2 ];then
操作指令
elseif[ 條件判斷1 ]||[ 條件判斷2 ];then
操作指令
elseif[ 條件判斷1 -o 條件判斷2 ];then
操作指令
elseif[ 條件判斷1 -a 條件判斷2 ];then
操作指令
else
操作指令
fi
7.常用端口:
1)80:www
2)22:ssh
3)21:ftp
4)25:mail
5)111:RPC(遠程過程調用)
6)631:CUPS(打印服務功能)
8.case語句:
case $param in
"選項1")
操作指令
;;
"選項2")
操作指令
;;
*) #默認選項
操作指令
;;
esac
9.函數:function,
function fname(){
程序片段
}
10.循環:
1)while do done:當condition成立時,進入循環,直到條件不成立,終止循環
while [ condition ]
do
程序片段
done
2)until do done:當condition條件成立時,就終止循環,否則就持續進行循環
until [ condition ]
do
程序片段
done
3)for...do...done:
for var in con1 con2 con3...
do
程序片段
done
該循環會將con1,con2...依此賦給var,然後執行程序片段
for((初始值;限制值;執行步階))
do
程序片段
done
11.seq n1 n2:生成n1到n2之間的連續數字
12.sh [-nvx] script.sh:執行腳本,參數,
1)-n:不要執行script,僅查詢語法問題
2)-v:在執行script前,先將script的內容輸出到屏幕上
3)-x:將使用到的script內容顯示到屏幕上