成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

[Shell]Shell中的算術-創(chuàng)新互聯(lián)

Shell 腳本變量默認是作為字符串處理,而不是數(shù)字,這使得在 Shell 腳本做數(shù)學運算顯得較為復雜。在保持腳本編程規(guī)范和更好的算術支持方便,Perl 和 Python 會是更好的選擇。但是你仍然可以選擇在 Shell 中進行算術。事實上,過去許多年來,Unix 已經(jīng)增加多種特性來支持數(shù)字處理。[Shell]Shell中的算術
備注:正如下文所示,一些幫助處理數(shù)字的命令在某些方便表現(xiàn)仍不夠完善,例如運算符周圍的空格。
declare

在 Shell 中你無需提前聲明變量,但如果你提前聲明一個整型變量,那么以下示例將展示整型變量是如何工作的:

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比博州網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式博州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋博州地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
$ n=6/3
$echo $n
6/3
$ declare-i n
$ n=6/3
$echo $n
2

如果你決定使用一個已有的程序或者內置命令來處理算術,那么你完全可以不用 declare 語句。

expr

   expr 是一個比較老的 Unix 程序可以用來算術求值。expr 在 Bourne Shell 時期開始廣為人知,因為 Bourne Shell 不支持算術。但在 Bash 和 Korn Shell 中,一般不再使用它。使用 expr 時,仍然是把變量當作一個字符串來處理,并且它對空格處理也不夠靈活,要求在表達式中使用空格分隔變量。

$ z=5
$ z=`expr $z+1`   ---- Need spaces around + sign.
$echo $z
5+1
$ z=`expr $z + 1`
$echo $z
6
let

   Bash 和 Korn Shell 內置處理算術的命令是 let。它對空格處理也有點不靈活,和 expr 相反,它要求變量之間不能使用空格。

$ let z=5
$echo $z
5
$ let z=$z+1
$echo $z
6
$ let z=$z + 1     # --- Spaces around + sign are bad with let
-bash: let: +: syntax error: operand expected (error token is "+")

$let z=z+1         # --- look Mom, no $ to read a variable.
$echo $z
7

如果不想為空格煩擾,那么請使用雙括號來包裹整個語句,這樣有無空格都可以順利求值。

$ ((e=5))
$echo $e
5
$ (( e= e + 3 ))
$echo $e
8
$ (( e=e+4 ))  # -- spaces or no spaces, it doesn't matter$ echo $e
12
bc

   如果要處理浮點數(shù)字或者更復雜一點的運算怎么辦?let 命令不能支持浮點數(shù)字,因此需要使用 bc 命令,但是你必須將整個運算表達式當作一個字符串來交給 bc 處理。

如果你使用 let 命令處理浮點會得到以下錯誤示例:

$let r=3.5-bash: let: r=3.5: syntax error in expression (error token is ".5")
$(( r= 3.5 ))
-bash: ((: r = 3.5 : syntax error in expression (error token is ".5")

bc 命令可以處理任意精度的數(shù)學運算。bc 有交互模式和 shell 腳本命令兩種模式。在交互模式下,使用 cntrl-d(EOF) 或者 quit 指令退出。

交互模式:

$ bc
bc1.06
Copyright1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This isfree software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.3 + 25
obase=2121100<cntrl-d>

腳本模式:

$r=3.5
$s=`echo "$r + 2.2" | bc`
$echo $s
5.7

$ z= `echo $z + 1 | bc`
-bash: z: command not found
                #-- spaces around = sign are bad
                                (shell thing, not bc)

$ z=`echo "$z + 1" | bc`
$echo $z
8
$ z=`echo "$z+1" | bc`  -- spaces don't matter with bc$ echo $z
9
數(shù)字布爾值表達式

   INTEGER1 -eq INTEGER2  : INTEGER1 等于 INTEGER2

INTEGER1 -ge INTEGER2  : INTEGER1 大于或等于 INTEGER2

INTEGER1 -gt INTEGER2  : INTEGER1 大于 INTEGER2

INTEGER1 -le INTEGER2  : INTEGER1 小于或等于 INTEGER2

INTEGER1 -lt INTEGER2  : INTEGER1 小于 INTEGER2

INTEGER1 -ne INTEGER2  : INTEGER1 不等于 INTEGER2

以下兩個 if 語句是等效的:

if (( x < y )); then
    statements
fiif [ $x -lt $y ]; then
    statements
fi

對于浮點算術,bc 返回 1 表示真,0 表示假:

if [ $( echo "$t < 3.4" | bc ) -eq 1 ]; then
    statements
fi

參考一

分享題目:[Shell]Shell中的算術-創(chuàng)新互聯(lián)
文章位置:http://jinyejixie.com/article40/pehho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、軟件開發(fā)、響應式網(wǎng)站外貿建站、網(wǎng)站營銷、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設
闽侯县| 宾川县| 图木舒克市| 郑州市| 卫辉市| 新津县| 道真| 信阳市| 江城| 鄂温| 云林县| 和龙市| 平武县| 开远市| 临洮县| 北碚区| 黔西县| 班玛县| 临洮县| 武汉市| 吉安县| 五原县| 巴塘县| 长岭县| 犍为县| 专栏| 澄迈县| 来宾市| 海林市| 富宁县| 汽车| 日照市| 常德市| 洛隆县| 新绛县| 闽侯县| 邵东县| 上蔡县| 迭部县| 武胜县| 涡阳县|