工作中經常需要寫shell腳本來處理一些重複的東西,使用腳本自動編譯,使用腳本多機器傳輸文件。
因爲不是天天寫shell,只是用到的時候寫一個,再加上腳本中的if的判斷條件有點多,容易忘記,所以做個備忘錄,以備不時之需
先說一下 if 表達式的基本語法
if [ command ]; then
符合該條件執行的語句
fi
if [ command ];then
符合該條件執行的語句
elif [ command ];then
符合該條件執行的語句
else
符合該條件執行的語句
fi
注意:
- if 條件 要以
if
結束
-
[]
if語句中 和 表達式要注意空格
-
then
和 fi
是分開的語句。如果要在同一行裏面輸入,則需要用分號將他們隔開
- 使用
-z
或者 -n
來檢查長度的時候,沒有定義的變量也爲0
下面是常用表達式
數字判斷
表達式 |
含義 |
int1 -eq int2 |
兩數相等爲真 |
int1 -ne int2 |
兩數不等爲真 |
int1 -gt int2 |
int1大於int2爲真 |
int1 -ge int2 |
int1大於等於int2爲真 |
int1 -lt int2 |
int1小於int2爲真 |
int1 -le int2 |
int1小於等於int2爲真 |
邏輯相關
字符串相關
表達式 |
含義 |
STRING |
當串str1爲非空時爲真 |
-z STRING |
“STRING” 的長度爲零則爲真 |
-n STRING |
“STRING” 的長度爲非零 non-zero則爲真 |
STRING1 == STRING2 |
如果2個字符串相同則爲真 |
STRING1 != STRING2 |
如果字符串不相等則爲 |
文件相關
表達式 |
含義 |
-a FILE |
如果 FILE 存在則爲真 |
-b FILE |
如果 FILE 存在且是一個塊特殊文件則爲真 |
-c FILE |
如果 FILE 存在且是一個字特殊文件則爲真 |
-d FILE |
如果 FILE 存在且是一個目錄則爲真 |
-e FILE |
如果 FILE 存在則爲真 |
-f FILE |
如果 FILE 存在且是一個普通文件則爲真 |
-g FILE |
如果 FILE 存在且已經設置了SGID則爲真 |
-h FILE |
如果 FILE 存在且是一個符號連接則爲真 |
-k FILE |
如果 FILE 存在且已經設置了粘制位則爲真 |
-p FILE |
如果 FILE 存在且是一個名字管道(F如果O)則爲真 |
-r FILE |
如果 FILE 存在且是可讀的則爲真 |
-s FILE |
如果 FILE 存在且大小不爲0則爲真 |
-t FD |
如果文件描述符 FD 打開且指向一個終端則爲真 |
-u FILE |
如果 FILE 存在且設置了SUID (set user ID)則爲真 |
-w FILE |
如果 FILE 如果 FILE 存在且是可寫的則爲真 |
-x FILE |
如果 FILE 存在且是可執行的則爲真 |
-O FILE |
如果 FILE 存在且屬有效用戶ID則爲真 |
-G FILE |
如果 FILE 存在且屬有效用戶組則爲真 |
-L FILE |
如果 FILE 存在且是一個符號連接則爲真 |
-S FILE |
如果 FILE 存在且是一個套接字則爲真 |
FILE1 -ot FILE2 |
如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則爲真 |
FILE1 -ef FILE2 |
如果 FILE1 和 FILE2 指向相同的設備和節點號則爲真 |
-o OPTIONNAME |
如果 shell選項 “OPTIONNAME” 開啓則爲真 |