if 條件語句
If 條件語句主要有三中形式:
- if...then…fi,
- if…then…else…fi
- if…then…elif…then…else…fi
1. if…then…fi 語法:
if 條件
then
條件判斷成立時執(zhí)行的語句
fi
這里的條件通常是一個條件測試命令 ,當條件為真 (執(zhí)行命令的退出狀態(tài)為0) 時執(zhí)行 then 后面的語句忠蝗;其也可以為一個普通的命令,當執(zhí)行命令的退出狀態(tài)為 0 時執(zhí)行 then 后面的語句。then 可以寫在 if 的 '條件' 后面,以分號相隔迹卢,也可以另起一行直接寫绊袋,語句必須以 fi 結(jié)束蟋恬,
例子
if echo "Hello"
then
echo "world"
fi
str='/usr/bin/perl'
if grep -q 'perl' "$str"; then
echo "I found perl in string '$str'"
fi
if [ 2 > 1 ]; then
echo "2 is bigger than 1"
fi
2. if…then…else…fi 語法:
if 條件
then
條件判斷成立時執(zhí)行的語句
else
條件判斷不成立時執(zhí)行的語句
fi
當 if 條件為真時執(zhí)行 then 后面的語句;當 if 條件為假時執(zhí)行 else 后面的語句涡尘,同樣語句必須以 fi 結(jié)束
例子
a=100
b=99
if [[ -n $a && -n $b ]];
then
if test $a -ge $b; then
echo "a ($a) is bigger than b ($b)"
else
echo "a ($a) is smaller than b ($b)"
fi
fi
執(zhí)行腳本得到結(jié)果: a (100) is bigger than b (99)
3. if…then…elif…then…else…fi
if 條件
then
(if) 條件判斷成立時執(zhí)行的語句
elif 條件
then
(elif) 條件判斷成立時執(zhí)行的語句
else
(if 與 elif) 條件判斷都不成立時執(zhí)行的語句
fi
語句必須以 fi 結(jié)束忍弛。可以把 fi 記成 if 的顛倒考抄,if...fi 閉合后才形成完整的 if 語句细疚。
例子
#!/bin/bash
set -e
set -u
if [[ -x example.sh ]]; then
echo "The file 'example.sh' exists and is executable"
elif [[ -f example.sh ]]; then
echo "The file 'example.sh' exists but is not executable"
else
echo "The file 'example.sh' does not exist"
fi
另存腳本為example3-3.sh,執(zhí)行腳本川梅;執(zhí)行 touch example.sh 后執(zhí)行腳本疯兼;執(zhí)行 chmod +x example.sh 后再次執(zhí)行腳本,將得到以下結(jié)果:
條件判斷之 test, [] 與 [[]]
這三個命令都屬于 shell 里面的條件測試命令贫途,條件判斷的返回狀態(tài)為 0 (真) 或者 1 (假)吧彪,if 基于條件測試返回的結(jié)果來決定如何執(zhí)行下面的代碼。
需要注意的是 [ ] 與 [[ ]] 也是命令!
故成對方括號之間的內(nèi)容可以理解為條件測試的參數(shù)丢早,根據(jù)我們前面講過的原則姨裸,參數(shù)之間要以空格分割秧倾,所以在寫條件判斷時一定要注意:**用空格分割參數(shù)! **
1. 整數(shù)和字符串比較操作符:
- 操作符 描述
- -z str 字符串為空為真
- -n str 字符串為非空為真
- = 兩個字符串相同為真
- != 兩個字符串不同為真
- -eq 操作對象的值相等為真
- -ne 操作對象的值不等為真
- -gt 左面的值大于右面的值為真
- -lt 左面的值小于右面的值為真
- -ge 左面的值大于等于右面的值為真
- -le 左面的值小于等于右面的值為真
2. 文件和目錄測試操作符
常用的文件測試操作符有:
- 操作符 描述
- -f 測試文件是否為常規(guī)文件
- -e 測試文件是否存在
- -d 測試文件是否為目錄
- -r 測試文件是否可讀
- -w 測試文件是否可寫
- -x 測試文件是否可執(zhí)行
3. 邏輯操作符:
- 邏輯操作符 && (所有條件都符合為真)
- || (其中一個條件符合即為真)
- ! (不符合條件為真)
4. 正則表達比較操作符 (=~)
- 通配符 描述
- ^ 匹配行的開始
- $ 匹配行的結(jié)束
- . 匹配任意一個字符
- 匹配零次或多次前面的單元/字符 *
- 傀缩? 匹配零次或1次前面的單元/字符
- 匹配1次或者多次前面的單元/字符 +
- \n 匹配換行符
- \t 匹配制表符
- \s 匹配空格
- \w 匹配字母數(shù)字下劃線
- \d 匹配數(shù)字
條件語句使用技巧
- 務必記得用 fi 來封閉 if 語句
- 在使用新的關(guān)鍵詞 (如 then else 等) 時那先,記得另起一行或者用 ';' 分割。
- 在條件判斷中使用變量時扑毡,我們最好用雙引號將變量引起來胃榕,以減少錯誤的產(chǎn)生。
- 在 [] 或 [[ ]] 是命令瞄摊,記得其中的參數(shù)之間需要加空格勋又。
- test 和 [ ] 完全相同,但 [[ ]] 是它們的加強版本换帜,在不想了解細節(jié)的情況下楔壤,推薦使用 [[ ]] 進行條件判斷。