運算符
賦值運算符
=
# "=" 即可以用作賦值忘渔,也可以用作測試
# "="左右不允許有空格
var=27
category=minerals
# = 作為測試操作符
if [ "$string1" = "$string2" ]
then
command
fi
# [ "X$string1" = "X$string2" ] 這樣寫是安全的,
# 這樣寫可以避免任意一個變量為空時的報錯。
# (變量前加的"X"字符規(guī)避了變量為空的情況)
算術(shù)運算符
** 冪運算
let a=5**3
echo $a # 125
+=
#自增常用的幾種寫法
a=1
let "a=$a+1"
(( a++ ))
(( a = $a + 1 ))
n=$[ $n + 1 ] # 整數(shù)擴展符周循。在 $[ ] 中可以計算整數(shù)的算術(shù)表達(dá)式
let "a++"
注意:注意,Bash并不支持浮點運算,Bash會將帶小數(shù)點的數(shù)看做字符串
a=1.5
let "b = $a + 1.3" # 報錯
# t2.sh: let: b = 1.5 + 1.3: syntax error in expression
# (error token is ".5 + 1.3")
# 如果你想在腳本中使用浮點數(shù)運算犀暑,借助bc 或外部數(shù)學(xué)函數(shù)庫
位運算
位運算很少出現(xiàn)在shell腳本中
邏輯(布爾)運算符
! 非(NOT)
fi
&& 邏輯與(AND)
if [ $condition1 ] && [ $condition2 ]
# 等同于: if [ $condition1 -a $condition2 ]
# 返回true如果 condition1 和 condition2 同時為真...
if [[ $condition1 && $condition2 ]] # 可行
# 注意雇初,&& 運算符不能用在[ ... ]結(jié)構(gòu)里拢肆。
數(shù)字常量
shell腳本會把數(shù)字以十進(jìn)制整數(shù)看待(base 10),除非數(shù)字加了特殊的前綴或標(biāo)記。 帶前綴0的數(shù)字是八進(jìn)制數(shù)(base 8)郭怪;帶前綴0x的數(shù)字是十六進(jìn)制數(shù)(base 16)支示。 內(nèi)嵌 # 的數(shù)字會以 BASE#NUMBER 的方式進(jìn)行求值(不能超出當(dāng)前shell支持整數(shù)的范圍)
# 十進(jìn)制數(shù): 默認(rèn)
let "dec = 32"
echo "decimal number = $dec" # 32
# 一切正常。
# 八進(jìn)制數(shù): 帶前導(dǎo)'0'的數(shù)
let "oct = 032"
echo "octal number = $oct" # 26
# 結(jié)果以 十進(jìn)制 打印輸出了鄙才。
# ------ ------ -----------
# 十六進(jìn)制數(shù): 帶前導(dǎo)'0x'或'0X'的數(shù)
let "hex = 0x32"
echo "hexadecimal number = $hex" # 50
echo $((0x9abc)) # 39612
# ^^ ^^ 雙圓括號進(jìn)行表達(dá)式求值
# 結(jié)果以十進(jìn)制打印輸出颂鸿。
# 其他進(jìn)制數(shù): BASE#NUMBER
# BASE 范圍: 2 - 64
# NUMBER 必須以 BASE 規(guī)定的正確形式書寫,如下:
let "bin = 2#111100111001101"
echo "binary number = $bin" # 31181
let "b32 = 32#77"
echo "base-32 number = $b32" # 231
let "b64 = 64#@_"
echo "base-64 number = $b64" # 4031
# 這種表示法只對進(jìn)制范圍(2 - 64)內(nèi)的 ASCII 字符有效攒庵。
# 10 數(shù)字 + 26 小寫字母 + 26 大寫字母 + @ + _
雙圓括號結(jié)構(gòu)
(( a = 23 )) # C風(fēng)格的變量賦值嘴纺,注意"="等號前后都有空格
echo "a (initial value) = $a" # 23
(( a++ )) # 后綴自增'a',C-style.
echo "a (after a++) = $a" # 24
(( a-- )) # 后綴自減'a', C-style.
echo "a (after a--) = $a" # 23
(( ++a )) # 前綴自增'a', C-style.
echo "a (after ++a) = $a" # 24
(( --a )) # 前綴自減'a', C-style.
echo "a (after --a) = $a" # 23
########################################################
# 注意浓冒,C風(fēng)格的++栽渴,--運算符,前綴形式與后綴形式有不同的
#+ 副作用稳懒。
n=1; let --n && echo "True" || echo "False" # False
n=1; let n-- && echo "True" || echo "False" # True
# 感謝 Jeroen Domburg闲擦。
########################################################
(( t = a<45?7:11 )) # C風(fēng)格三目運算符。
# ^ ^ ^
echo "If a < 45, then t = 7, else t = 11." # a = 23
echo "t = $t " # t = 7
唯有愛與技術(shù)不可辜負(fù)