shell程式設計--2
上篇我們學會了如何使用及定義變數。按照尿性,一般接下來就該學基本資料型別的運算了。
沒錯,本篇就仍是這麼俗套的來講講這無聊但又必學的基本資料型別的運算了。
基本資料型別運算
操作符
符號 | 語義 | 描述 |
---|---|---|
+ | 加 | 10+10,結果為20 |
- | 減 | 10-3, 結果為7 |
* | 乘 | 10*2,結果為20 |
/ | 除 | 10/3, 結果為3(取整數) |
% | 求餘 | 10%3, 結果為1 (取餘數) |
== | 判斷是否相等 | 兩數相等返回1,否則0 |
!= | 判斷是否不等 | 兩數不等返回1,否則0 |
> | 大於 | 前者大於後者返回1,否則0 |
>= | 大於或等於 | 前者大於或等於後者返回1,否則0 |
< | 小於 | 前者小於後者返回1,否則0 |
<= | 小於或等於 | 前者小於或等於後者返回1,否則0 |
上述操作符與其它語言相比,並無特殊之處。
在shell中,對於基本資料型別的運算主要分為兩種,整數運算和浮點數(小數)運算。下面就分別來看看這兩種運算:
整數運算
在shell中,有兩種方式能實現整數運算,一種是使用expr命令, 另外一種是通過方括號($[])來實現。下面分別來看看:
expr
#!/bin/bash
#輸出13
expr 10 + 3
#輸出10+3
expr 10+3
#輸出7
expr 10 - 3
#輸出30
expr 10 \* 3
#輸出3
expr 10 / 3
#輸出1
expr 10 % 3
#將計算結果賦值給變數
num1=$(expr 10 % 3)
#將計算結果賦值給變數
num2=`expr 10 % 3`
注意:
在以上的乘法(*)中,我們用了反斜線(\)來轉義,不然會報錯。
運算子前後必須還有空格,否則會被直接當作字串返回。
如果要將計算結果儲存到變數,就需要用到我們上篇文章講到的那兩種方式($() 或者 ``)來替換命令了。
這種種跡象無不讓人吐槽啊。幸好還有一種實現方式,那就是接下來要看的方括號。
方括號($[])
#!/bin/bash
num1=10
num2=3
#輸出num1 + num2=13
echo "num1 + num2=$[$num1 + $num2]"
#輸出num1+num2=13
echo "num1+num2=$[$num1+$num2]"
#輸出num1 - num2=7
echo "num1 - num2=$[$num1 - $num2]"
#輸出num1 * num2=30
echo "num1 * num2=$[$num1 * $num2]"
#輸出num1 > num2=1
echo "num1 > num2=$[$num1 > $num2]"
#輸出num1 < num2=0
echo "num1 < num2=$[$num1 < $num2]"
#將運算結果賦值給變數,輸出num3=3
num3=$[$num1 / $num2]
echo "num3=$num3"
看了這種運算,再回看expr, 是不是覺得要昇天,終於正常了。expr的那幾個注意事項,在這兒都不算事兒。所以,如果要圖簡單,還是用這種方式吧。
浮點運算
在shell中,做浮點運算一般是用bash的計算器(bc)。在shell指令碼中,一般我們的使用方法是:
variable=$(echo "options; expression" | bc)
options是bc的一些選項,例如: 可以通過scale去設定保留的小數位數。具體有哪些引數,可以man bc進行檢視
expression就是我們具體的表示式,例如 10 * 3
" | "這個符號,對於熟悉linux系統的人來說,這個再熟悉不過了。它叫做管道, 之所以會叫做管道,其實很形象,你可以把它看作一根水管,水管一頭接入前一個命令的返回結果, 一頭接入下一個命令。表示將前一個命令的執行結果作為後一個命令的引數輸入。以上,表示將我們的表示式作為bc的引數輸入。
#!/bin/bash
#表示 10/3, 保留2位小數,將結果賦值給了num, 輸出3.33
num=$(echo "scale=2; 10 / 3" | bc)
echo $num
小結
本篇比較無聊,簡單介紹了shell的基本運算子及其運算。shell運算主要分為整型和浮點型的運算。整型又有兩種實現方式,浮點型是通過使用bash內建的計算器(bc)來實現的。
好啦,到此,我們學習了shell的變數的使用,也學習了基本資料型別變數的計算啦!挺簡單吧