shell 運算符

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位
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市亡笑,隨后出現(xiàn)的幾起案子侣夷,更是在濱河造成了極大的恐慌,老刑警劉巖仑乌,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百拓,死亡現(xiàn)場離奇詭異琴锭,居然都是意外死亡,警方通過查閱死者的電腦和手機耐版,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門祠够,熙熙樓的掌柜王于貴愁眉苦臉地迎上來压汪,“玉大人粪牲,你說我怎么就攤上這事≈蛊剩” “怎么了腺阳?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長穿香。 經(jīng)常有香客問我亭引,道長,這世上最難降的妖魔是什么皮获? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任焙蚓,我火速辦了婚禮,結(jié)果婚禮上洒宝,老公的妹妹穿的比我還像新娘购公。我一直安慰自己,他們只是感情好雁歌,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布宏浩。 她就那樣靜靜地躺著,像睡著了一般靠瞎。 火紅的嫁衣襯著肌膚如雪比庄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天乏盐,我揣著相機與錄音佳窑,去河邊找鬼。 笑死父能,一個胖子當(dāng)著我的面吹牛华嘹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播法竞,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耙厚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岔霸?” 一聲冷哼從身側(cè)響起薛躬,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呆细,沒想到半個月后型宝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體八匠,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年趴酣,在試婚紗的時候發(fā)現(xiàn)自己被綠了梨树。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡岖寞,死狀恐怖抡四,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仗谆,我是刑警寧澤指巡,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站隶垮,受9級特大地震影響藻雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狸吞,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一勉耀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹋偏,春花似錦便斥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至字逗,卻和暖如春京郑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葫掉。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工些举, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俭厚。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓户魏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挪挤。 傳聞我的和親對象是個殘疾皇子叼丑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評論 0 5
  • Shell 和其他編程語言一樣,支持多種運算符扛门,包括: 算數(shù)運算符 關(guān)系運算符 布爾運算符 字符串運算符 文件測試...
    孤月環(huán)舟閱讀 301評論 0 0
  • Bash 支持很多運算符鸠信,包括算數(shù)運算符、關(guān)系運算符论寨、布爾運算符星立、字符串運算符和文件測試運算符爽茴。 原生bash不支...
    Viking_Den閱讀 373評論 0 2
  • shell支持多種運算符 算術(shù)運算符 關(guān)系運算符 邏輯運算符 字符串運算符 文件測試運算符 1.算術(shù)運算符 原生b...
    螞蟻牙齒不黑閱讀 209評論 0 0
  • Shell 基本運算符 Shell 和其他編程語言一樣,支持多種運算符绰垂,包括: 算數(shù)運算符 關(guān)系運算符 布爾運算符...
    frankisbaby閱讀 188評論 0 0