測試運算符
-z 字符串長度為空
-n 字符串長度不為空
上面這倆,當條件滿足時,取值為真,呃,個人偏愛-z,以至於當需要判斷不為空時,仍用 ! -z .....您當我犯賤吧...
整數測試
intl -eq int2 int1等於int2
ntl -ne int2 int1不等於int2
ntl -gt int2 int1大於int2
ntl -ge int2 int1大於或等於int2
ntl -lt int2 int1小於int2
ntl -le int2 int1小於或等於int2
我會告訴大家,我寫這些出來,是因為我壓根就記不住嗎
邏輯測試
expr1 -a expr2 邏輯與 &&
expr1 -o expr2 邏輯或 ||
這個傳說中的邏輯與和邏輯或..這是坑....
文件測試
-b filename 該文件是塊特殊文件
-c filename 該文件是字符特殊文件
-d filename 該目錄是否存在
-f filename 該普通文件存在且不是目錄
-g filename 設置了set-group-ID位
-k filename sticky位被設置
-p filename 該文件是命名管道
-r filename 讀
-s filename 大小不為0
-u filename 設置了set-user-ID位
-w filename 該文件可寫
-x filename 該文件可執行
-L 或者 -H filename 鏈接文件 快捷方式
記得上次整理筆記的時候,把 -L給忘寫了...以至於上次作業,老師的意思估計是讓用判斷語句判斷文件,目錄和鏈接...當時我以為沒有判斷鏈接文件測試條件....後來...我用find....
特殊變量
$0 腳本自身的名字
$? 前一命令的退出狀態
$$ shell進程的進程編號
$! 最近一個後台命令的進程編號。以此方式存儲進程編號
$@ 輸出所有傳遞的參數值:區別&下:加雙引號時,所有的參數均為獨立值
$* 輸出所有傳遞的參數值:區別&上:加雙引號時,所有參數變為一個值
$# 傳遞的位置參數總個數
$HOEM 當前用戶家目錄
$PS1 主要命令提示符字符串
$LANG 當前編碼環境
$PPID 父進程編號
$PWD 當前的工作目錄
其中$@和$*區別,例:
[root@bogon shellscripts]# set 'apple pie' pears peaches
[root@bogon shellscripts]# for i in "$*"; do echo $i; done
apple pie pears peaches $*加引號時,注意結果
[root@bogon shellscripts]# for i in "$@"; do echo $i; done
apple pie $@加引號時,注意結果
pears
peaches
替換運算符
${varname:-word} 定義默認值,$varname變量名
${varname:+word} 如果變量存在,則顯示word值,否則返回空,用於測試變量是否存在和約束輸入
${varname:?message} 如果變量為空,則顯示message信息,主要用於排錯
我只能說,這個很重要...你懂的...