shell第一篇则吟,我們先看看運算符吧,因為這個和我了解的其他語言有點區(qū)別锄蹂,所以先筆記下氓仲!
內(nèi)容參考:菜鳥教程
基本運算符
- 算術(shù)運算符
- 關(guān)系運算符
- 布爾運算符
- 字符串運算符
- 文件測試運算符
原生的bash不支持簡單的數(shù)學(xué)運算,但是可以通過其他命令來實現(xiàn)得糜,例如awk和expr敬扛,expr最常用。
expr是一款表達(dá)式計算工具朝抖,使用它能完成表達(dá)式求值操作啥箭。
例如:a+b -->$a+$b
注意 “`”為半角下的tab鍵上的按鍵
注意:
- 表達(dá)式和運算符之間要有空格。 正確寫法"a + b"治宣,錯誤寫法"a+b"
*完成的表達(dá)式要被``包含急侥,這個不是單引號,是Esc下方的按鍵侮邀。
算術(shù)運算符
直接通過代碼演示了坏怪,詳細(xì)的說明可以看菜鳥教程。
# 局部變量
# 注意 變量聲明不能帶空格
a=10
b=20
# 錯誤示范 當(dāng)2+2沒有空格的時候
# 打印結(jié)果為 a + b : 2+2
val=`expr 2+2`
echo "a + b : $val"
# 下面全部為正確示范
# >>加法
val=`expr $a + $b`
echo "a + b : $val"
# 打印結(jié)果 a + b : 30
# >>減法
val=`expr $a - $b`
echo "a - b : $val"
# 打印結(jié)果 a - b : -10
# >>乘法 利用\轉(zhuǎn)譯下*
val=`expr $a \* $b`
echo "a * b : $val"
# 打印結(jié)果 a * b : 200
# >>除法
val=`expr $b / $a`
echo "b / a : $val"
# 打印結(jié)果 b / a : 2
# >>取余
val=`expr $b % $a`
echo "b % a : $val"
# 打印結(jié)果 b % a : 0
# >>賦值 上面一直在演示绊茧,不能帶空格
val=$a
echo "a : $val"
# 打印結(jié)果 a : 10
# >>相等 用來比較兩個數(shù)
if [[ $a == $b ]]; then
echo "a 等于 b"
else
echo "a 不等于 b"
fi
# 打印結(jié)果 a 不等于 b
# >>不相等 用來比較兩個數(shù)
if [[ $a != $b ]]; then
echo "a 不等于 b"
else
echo "a 等于 b"
fi
# 打印結(jié)果 a 等于 b
- 乘法運算的"*"必須使用""進(jìn)行轉(zhuǎn)義才能夠使用
- if...then...else...fi 是條件語句铝宵,同c語言的if...else
- 在mac中shell的expr語法是$((表達(dá)式)),這個時候的"*"不需要""進(jìn)行轉(zhuǎn)義了华畏。
關(guān)系運算符
# 局部變量
a=10
b=20
# 練習(xí) -eq 是否相等
if [[ $a -eq $b ]]; then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b : a 不等于 b"
fi
# 練習(xí) -ne 是否不相等
if [[ $a -ne $b ]]; then
echo "$a -ne $b : a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
# 練習(xí) -gt 是否大于
if [[ $a -gt $b ]]; then
echo "$a -gt $b : a 大于 b"
else
echo "$a -gt $b : a 不大于 b"
fi
# 練習(xí) -lt 是否小于
if [[ $a -lt $b ]]; then
echo "$a -lt $b : a 小于 b"
else
echo "$a -lt $b : a 不小于 b"
fi
# 練習(xí) -ge 是否大于等于
if [[ $a -ge $b ]]; then
echo "$a -ge $b : a 大于或等于 b"
else
echo "$a -ge $b : a 小于 b"
fi
# 練習(xí) -le 是否小于等于
if [[ $a -le $b ]]; then
echo "$a -le $b : a 小于或等于 b"
else
echo "$a -le $b : a 大于 b"
fi
輸出結(jié)果:
10 -eq 20 : a 不等于 b
10 -ne 20 : a 不等于 b
10 -gt 20 : a 不大于 b
10 -lt 20 : a 小于 b
10 -ge 20 : a 小于 b
10 -le 20 : a 小于或等于 b
布爾運算符
# 局部變量
a=10
b=20
# ! 非運算
if [[ $a != $b ]]; then
echo "$a != $b : a 不等于 b"
else
echo "$a != $b : a 等于 b"
fi
# -a 與運算
if [ $a -lt 100 -a $b -gt 15 ]; then
echo "$a 小于 100 且 $b 大于15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于15 : 返回 false"
fi
# -o 或運算
if [ $a -lt 100 -o $b -gt 100 ]; then
echo "$a 小于 100 或 $b 大于100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于100 : 返回 false"
fi
# 補充運算
if [ $a -lt 5 -o $b -gt 100 ]; then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
輸出結(jié)果:
10 != 20 : a 不等于 b
10 小于 100 且 20 大于15 : 返回 true
10 小于 100 或 20 大于100 : 返回 true
10 小于 5 或 20 大于 100 : 返回 false
邏輯運算符
# 局部變量
a=10
b=20
# && 邏輯與 ADN
if [[ $a -lt 100 && $b -gt 100 ]]; then
echo "返回 true"
else
echo "返回 false"
fi
# || 邏輯或 OR
if [[ $a -lt 100 || $b -gt 100 ]]; then
echo "返回 true"
else
echo "返回 false"
fi
輸出結(jié)果:
返回 false
返回 true
字符串運算符
# 局部變量
a="abc"
b="efg"
# = 檢查兩個字符串是否相等
if [[ $a = $b ]]; then
echo "$a = $b : a 等于 b"
else
echo "$a = $b : a 不等于 b"
fi
# != 檢測兩個字符串是否不相等
if [[ $a != $b ]]; then
echo "$a != $b : a 不等于 b"
else
echo "$a != $b : a 等于 b"
fi
# -z 檢測字符串長度是否為0
if [[ -z $a ]]; then
echo "-z $a : 字符串長度為 0"
else
echo "-z $a : 字符串長度不為 0"
fi
# -n 檢測字符包長度是否不為0
if [[ -n $a ]]; then
echo "-n $a : 字符串長度不為 0"
else
echo "-n $a : 字符串長度為 0"
fi
# str 檢測字符串是否不為空
if [[ $a ]]; then
echo "$a : 字符串不為空"
else
echo "$a : 字符串為空"
fi
輸出結(jié)果:
abc = efg : a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串長度不為 0
-n abc : 字符串長度不為 0
abc : 字符串不為空
文件測試運算符
# 文件路徑
file="/Users/lijianping/CodeHome/shell/les01/file.sh"
# -r 檢測文件是否可讀
if [[ -r $file ]]; then
echo "文件可讀"
else
echo "文件不可讀"
fi
# -w 檢測文件是否可寫
if [[ -w $file ]]; then
echo "文件可寫"
else
echo "文件不可寫"
fi
# -x 檢測文件是否可執(zhí)行
if [[ -x $file ]]; then
echo "文件可執(zhí)行"
else
echo "文件不可執(zhí)行"
fi
# -f 文件是否為普通文件 即不是目錄鹏秋,不是設(shè)備文件
if [[ -f $file ]]; then
echo "文件為普通文件"
else
echo "文件為特殊文件"
fi
# -d 檢測文件是否為目錄
if [[ -d $file ]]; then
echo "文件是個目錄"
else
echo "文件不是目錄"
fi
# -s 檢測文件是否為空 即文件大小是否大于0
if [[ -s $file ]]; then
echo "文件不為空"
else
echo "文件為空"
fi
# -e 檢測文件是否存在 包括目錄
if [[ -e $file ]]; then
echo "文件存在"
else
echo "文件不存在"
fi
輸出結(jié)果:
文件可讀
文件可寫
文件不可執(zhí)行
文件為普通文件
文件不是目錄
文件不為空
文件存在
其他文件測試相關(guān)操作符介紹:
操作符 | 說明 |
---|---|
-b file | 檢測文件是否是塊設(shè)備文件 |
-c file | 檢測文件是否是字符設(shè)備文件 |
-g file | 檢測文件是否設(shè)置了SGID位 |
-k file | 檢測文件是否設(shè)置了粘著位(Sticky Bit) |
-p file | 檢測文件是否是有名管道 |
-u file | 檢測文件是否設(shè)置了SUID位 |