系列文章: Linux Shell 常用命令 - 01篇 8. shell 中各種括弧的作用 參考 https://www.jb51.net/article/123081.htm https://www.jianshu.com/p/3e1eaaa3fee8 8.1 單小括弧 () 一般在命令替換的時 ...
系列文章:
Linux Shell 常用命令 - 01篇
8. shell 中各種括弧的作用
參考
https://www.jb51.net/article/123081.htm
https://www.jianshu.com/p/3e1eaaa3fee8
8.1 單小括弧 ()
一般在命令替換的時候使用
#!/bin/bash
today=$(date +%Y%m%d)
# shell掃描一遍命令,發現了$()結構,便將$()中的命令執行一次,得到其標準輸出,再將此輸出賦值給today
# 等同於today=`date +%Y%m%d`
8.2 雙小括弧 (())
使用雙括弧,在比較過程中使用高級數學表達式
符號 | 描述 |
---|---|
val++ | 後增 |
val-- | 後減 |
++val | 先增 |
--val | 先減 |
! | 邏輯求反 |
~ | 位求反 |
** | 冪操作 |
<< | 左位移 |
>> | 右位移 |
&& | 邏輯與 |
|| | 邏輯或 |
雙小括弧 (( )) 是 Bash Shell 中專門用來進行整數運算的命令,它的效率很高,寫法靈活,是企業運維中常用的運算命令。(())
是一種數學計算命令,它除了可以進行最基本的加減乘除運算,還可以進行大於、小於、等於等關係運算,以及與、或、非邏輯運算。
註:(( )) 只能進行整數運算,不能對小數(浮點數)或者字元串進行運算。
雙小括弧 (( )) 的語法格式為:
((表達式))
通俗地講,就是將數學運算表達式放在((
和))
之間。
表達式可以只有一個,也可以有多個,多個表達式之間以逗號,
分隔。對於多個表達式的情況,以最後一個表達式的值作為整個 (( )) 命令的執行結果。
可以使用 $ 獲取 (( )) 命令的結果,這和使用 $ 獲得變數值是類似的。
在 (( )) 中使用變數無需加上$
首碼,(( )) 會自動解析變數名,這使得代碼更加簡潔,也符合程式員的書寫習慣。
【實例1】利用 (( )) 進行簡單的數值計算。
【實例2】利用 (( )) 進行邏輯運算。
運行結果如下:
可以直接使用if (($i<5)), 如果不使用雙括弧, 則為if [ $i -lt 5 ]
【實例3】利用 (( )) 進行自增(++)和自減(--)運算。
val=10
((val++))
echo $val
# 輸出 11
【實例4】利用 (( )) 同時對多個表達式進行計算。
8.3 單方括弧 []
方括弧定義了測試條件。第一個方括弧 ([
) 後和第二個方括弧 (]
) 前都要加一個空格,否則會報錯。方括弧主要包括4類判斷:
(1)數值比較:
if [ $val1 -eq $val2 ]
if [ $val1 -le $val2 ]
...
(2)字元串比較:
if [ $str1 = $str2 ]
if [ $str1 != $str2 ]
if [ -n $str1 ] # 檢查str1的長度是否非0
if [ -z $str1 ] # 檢查str1的長度是否為0
例:test.sh腳本如下:
運行結果:
經過測試,數值也可以使用=, !=,且對於數值與字元串,=與==效果貌似一樣?
運行結果:
(3)文件比較
(4)符合條件比較
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
註:[ ]中的 邏輯與 和 邏輯或 使用 -a 和 -o 表示,例: if [ $a -ne 1 -a $a != 2 ]
,或寫作:if [ $a -ne 1 ] && [ $a != 2 ]
8.4 雙方括弧 [[]]
- 雙方括弧提供了字元串比較的高級特性
- 括弧中可以定義一些正則表達式來匹配字元串
- 註意不是所有的shell都支持雙方括弧
註:&&、||、< 和 > 操作符能夠正常存在於[[ ]]條件判斷結構中,比如可以直接使用 if [[ $a != 1 && $a != 2 ]]
8.5 示例
if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done
9. shell if else 語句
9.1 if 語句
if condition
then
statement(s)
fi
如果要將then 和 if 寫在一行,要加個分號:
if condition; then
statement(s)
fi
【實例1】下麵的例子使用 if 語句來比較兩個數字的大小: