shell下整數運算

2021-07-09 08:49:32 字數 2093 閱讀 6688

exprt是用tab上面``包含起來,並且expr中運算子兩邊要有空格,否則當作連字元。

((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`

letexpressions 

執行乙個或多個表示式。表示式中的變數前不必有$.如果表示式中包含了空格或其他特殊字元,則必須引起來。

例: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,運算命令是let b=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。

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的數**算並輸出結果,結果如下所示。

90

超長整數運算(大整數運算)

問題描述 將形如1234567890123456789不能儲存在long變數中的數稱為超長整數或大整數。現討論大整數的加減乘除運算。思想方法 用陣列儲存超長整數,且為處理的簡單起見約定每個元素存放相同位的數字。如 每個元素存放4位。1 加法運算 void add int a,int b,int c ...

shell字串與整數比較與運算

bin sh 字串比較 比較大小以及是否相等 a hello b hello c how if a b then 注意對於字串的相等比較,使用 或 都可以,二者是等價的 echo same else echo not same fiif a c then echo a c fiif a c then...

大整數運算

包括大整數的四則運算,一般都是用陣列來模擬大整數的,如果是每一位陣列只存一位數的話,空間浪費比較嚴重,所以這裡每一位陣列儲存4位數,所以是10000進製。加法 輸入 不超過兩百位的非負整數,可能有多餘的前導零。輸出 相加後的結果,不能有多餘的前導零 首先是一些基本的常量定義 define bir 1...