自學Linux Shell11.5-執行數字運算

點擊返回 自學Linux命令行與Shell腳本之路html

11.5-執行數字運算

1. Shell基本運算符

Shell 和其餘編程語言同樣,支持多種運算符,包括:shell

  • 算數運算符
  • 關係運算符
  • 布爾運算符
  • 字符串運算符
  • 文件測試運算符

原生bash不支持簡單的數學運算,可是能夠經過其餘命令來實現,例如 awk 和 expr,expr 最經常使用。編程

expr 是一款表達式計算工具,使用它能完成表達式的求值操做。數組

例如,兩個數相加(注意使用的是反引號 ` 而不是單引號 '):bash

注意:編程語言

  • 表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與咱們熟悉的大多數編程語言不同。
  • 完整的表達式要被 ` ` 包含,注意這個字符不是經常使用的單引號,在 Esc 鍵下邊。

1.1 算數運算符

下表列出了經常使用的算術運算符,假定變量 a 爲 10,變量 b 爲 20:函數

運算符 說明 舉例
+ 加法 `expr $a + $b` 結果爲 30。
- 減法 `expr $a - $b` 結果爲 -10。
* 乘法 `expr $a \* $b` 結果爲  200。
/ 除法 `expr $b / $a` 結果爲 2。
% 取餘 `expr $b % $a` 結果爲 0。
= 賦值 a=$b 將把變量 b 的值賦給 a。
== 相等。用於比較兩個數字,相同則返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用於比較兩個數字,不相同則返回 true。 [ $a != $b ] 返回 true。

 

注意:工具

  • 乘號(*)前邊必須加反斜槓(\)才能實現乘法運算;
  • if...then...fi 是條件語句,後續將會講解。
  • 在 MAC 中 shell 的 expr 語法是:$((表達式)),此處表達式中的 "*" 不須要轉義符號 "\" 。

1.2 關係運算符

關係運算符只支持數字,不支持字符串,除非字符串的值是數字。測試

下表列出了經常使用的關係運算符,假定變量 a 爲 10,變量 b 爲 20:ui

運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 檢測兩個數是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,若是是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,若是是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大於等於右邊的,若是是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,若是是,則返回 true。 [ $a -le $b ] 返回 true。

 

1.3 布爾運算符

下表列出了經常使用的布爾運算符,假定變量 a 爲 10,變量 b 爲 20:

運算符 說明 舉例
! 非運算,表達式爲 true 則返回 false,不然返回 true。 [ ! false ] 返回 true。
-o 或運算,有一個表達式爲 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達式都爲 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

1.4 邏輯運算符

如下介紹 Shell 的邏輯運算符,假定變量 a 爲 10,變量 b 爲 20:

運算符 說明 舉例
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

 1.5 字符串運算符

下表列出了經常使用的字符串運算符,假定變量 a 爲 "abc",變量 b 爲 "efg":

運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否爲0,爲0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是否爲0,不爲0返回 true。 [ -n "$a" ] 返回 true。
str 檢測字符串是否爲空,不爲空返回 true。 [ $a ] 返回 true。

 1.6 文件測試運算符

文件測試運算符用於檢測 Unix 文件的各類屬性。

屬性檢測描述以下:

操做符 說明 舉例
-b file 檢測文件是不是塊設備文件,若是是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是不是字符設備文件,若是是,則返回 true。 [ -c $file ] 返回 false。
-d file 檢測文件是不是目錄,若是是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是不是普通文件(既不是目錄,也不是設備文件),若是是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是否設置了 SGID 位,若是是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是否設置了粘着位(Sticky Bit),若是是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是不是有名管道,若是是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是否設置了 SUID 位,若是是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,若是是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,若是是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執行,若是是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,若是是,則返回 true。 [ -e $file ] 返回 true。

2. 執行數學運算

2.1 整數數學運算兩種途徑:

  • expr命令   (比較笨拙,前面已經介紹過)
  • 將一個數字運算符結果賦值給某個變量時,使用$[ 運算表達式 ] 

 

 2.2 浮點數解決辦法

最多見的方案使用內建的bash計算器,叫作bc

bash計算器容許在命令行中輸入浮點表達式,而後解釋並計算該表達式,最後返回結果。
bash計算器可以識別如下:

  • 數字(整數和浮點數)
  • 變量(簡單變量和數組)
  • 註釋
  • 表達式
  • 變成語句
  • 函數

退出bash計算器,必須輸入quit。浮點運算是由內建變量scale控制的。

相關文章
相關標籤/搜索