shell是linux內核系統中一個非常重要的功能了,我們可以利用 shell來進行編程了,下面一起來看看小編總結的shell命令進行算術/數值運算的方法.
shell中的變量都是以字符串的形式保存的,即使你賦值的時候給的是整形值,除非你通過declare -i來聲明變量.
在進行數值/算術運算的時候,你可能會發現下面的情況.
- $ x=121
- $ echo $x+1
- 121+1
定義變量x,并賦值一個整形的變量,可是echo $x+1的結果卻不是我們想要的122,而是121+1,這是因為$x+1并沒有被當做算術運算,而是簡單的字符串的運算導致,那如何在shell中進行數值/算術運算呢,以下使用的shell為bash shell.
- 方法一:let命令
- $ let "x=x+1"
- $ echo $x
- 122
- 方法二:$[ ]
- $ echo $[x-1]
- 121
- $ echo $x
- 122
- 方法三:$(( ))
- $ echo $((x-1))
- 121
- $ echo $x
- 122
- 方法四:declare -i
- $ declare -i x
- $ echo $x+1
- 122+1
- $ x=$x+1
- $ echo $x
- 123
通過declare聲明變量x之后,需要重新給x賦值后,x才能得到算術運算的結果.
5.加雙括號的
- count=0
- ((count++))
6.使用expr命令
- count=0
- count=`expr $count + 1`
7.使用bc命令
- count=0
- count= `echo "$count + 1"|bc`
介紹:bc是linux下的一個簡單計算器,支持浮點數計算,在命令行下輸入bc即進入計算器程序,而我們想在程序中直接進行浮點數計算時,利用一個簡單的管道即可解決問題.
注意:
1)經測試bc支持除位操作運算符之外的所有運算符.
2)bc中要使用scale進行精度設置.
3)浮點數計算實例.
- count=3.11
- count=`echo "scale=2;$count*3"|bc`
- echo $count
- 輸出結果為9.33
8.使用awk計算
echo $var 1| awk '{printf("%d/n", $1+$2)}'
補充:
- ((i=$j+$k)) 等價于 i=`expr $j + $k`
- ((i=$j-$k)) 等價于 i=`expr $j -$k`
- ((i=$j*$k)) 等價于 i=`expr $j /*$k`
- ((i=$j/$k)) 等價于 i=`expr $j /$k`
Let expressions 執行一個或多個表達式,表達式中的變量前不必有$.如果表達式中包含了空格或其他特殊字符,則必須引起來.
例:let “I = I + 1” 或 let i=i+1
算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符,Shell中常用的數學運算符如下所示.
- — +:對兩個變量做加法。
- — -:對兩個變量做減法。
- — *:對兩個變量做乘法。
- — /:對兩個變量做除法。
- — **:對兩個變量做冪運算。
- — %:取模運算,第一個變量除以第二個變量求余數。
- — +=:加等于,在自身基礎上加第二個變量。
- — -=:減等于,在第一個變量的基礎上減去第二個變量。
- — *=:乘等于,在第一個變量的基礎上乘以第二個變量。
- — /=:除等于,在第一個變量的基礎上除以第二個變量。
- — %=:取模賦值,第一個變量對第二個變量取模運算,再賦值給第一個變量。
在使用這些運算符時,需要注意到運算順序的問題,例如輸入下面的命令,輸出1+2的結果.
echo 1+2
Shell并沒有輸出結果3,而是輸出了1+2,在shell中有三種方法可以更改運算順序,— 用expr改變運算順序,可以用echo `expr 1 +2`來輸出1+2的結果,用expr表示后面的表達式為一個數學運算,需要注意的是,`并不是一個單引號,而是“Tab”鍵上面的那個符號.
— 用let指示數學運算。可以先將運算的結果賦值給變量b,運算命令是b=let 1 + 2。然后用echo$b來輸出b的值。如果沒有let,則會輸出1+2。
— 用$[]表示數學運算。將一個數學運算寫到$[]符號的中括號中,中括號中的內容將先進行數學運算。例如命令echo$[1+2],將輸出結果3。
下面是一個shell程序實例,實現數學函數S=3(xy)+4x2+5y+6的運算。在程序中以位置變量的方式輸入x與y的值。程序的編寫步驟如下所示。
在主菜單中打開一個終端。在終端中輸入“vim”命令打開VIM,在VIM中按“i”鍵進入插入模式,然后輸入下面的代碼.
代碼4-2 數學運算實例:/源文件/04/4.4.sh
- #!/bin/bash
- #4.4.sh
- s=0 #定義一個求和變量,初值為0。
- t=`expr$1**$2` #用expr改變運算順序,求x的y次方。
- t=$[t*3] #t乘以3。 --Vevb.com
- s=$[s+t] #結果相加。
- t=$[$1**2] #求x的平方。
- t=$[t*4] #結果乘以4。
- s=$[s+t] #結果相加。
- t=`expr$2*5` #求5y的值。
- s=$[s+t] #結果相加。
- s=$[s+6] #結果加上6。
- echo$s #輸出結果。
- echo$((a%b)) #取余
在這個程序中,需要注意算術運算的寫法,如果沒有expr或$[]更改運算順序,則會將運算式以字符串的形式賦值,而不會賦值運算結果.
按“Esc”鍵返回到普通模式,然后輸入“:w 4.4.sh”保存文件,輸入“:q”命令,按“Enter”鍵退出VIM.
在終端中,輸入下面的命令對4.4.sh文件添加可執行權限.
chmod +x 4.4.sh
輸入下面的命令運行程序,在命令中需要輸入兩個參數。
./4.4.sh 2 4
程序會完成S=3(xy)+4x2+5y+6的數學運算并輸出結果.
新聞熱點
疑難解答