日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux/unix不同shell环境下数值运算的处理

發布時間:2025/3/15 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux/unix不同shell环境下数值运算的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在閱讀本文前,您需要對變量替換、命令替換和數值替換有一點認識。 閱讀完本文,您應該獲得解決下列問題的信息:
  • 不同shell(bash,csh,ksh)下如何處理數值的運算
  • 常用來數值運算的命令
  • 關于運算結果精確到幾位小數點的問題
  • 運算方式一:
    $[] 適用范圍:只適用于bash,而sh(如solaris的默認shell)、ksh(如IBM AIX的默認shell)、csh都不支持。 注意我們要計算10+2*((3+1)*(5-1)/2)
    需要機變一下,通過這種方式
    echo $[10+2*$[$[3+1]*$[5-1]/2]]
    注意中間不能有空格否則就會被錯誤解析。 [附注] 運算方式五:關于進制的處理 關于進制:表達和使用不同的進制。數字可以表達為二進制數、十進制數和十六進制數等等,范圍從2進制~36進制。
    ?
    我們用下面的形式實現:
    $ echo $[8#17]
    15
    $ echo $[16#b]
    11 實際中我們甚至可以計算7進制的一個數6543210的值表示的10進制是多少。
    echo $[7#6543210] 注意上面的操作只是bash上的小技巧,ksh和csh都不支持。 運算方式二:
    (()) 適用范圍:只適用于bash和ksh,不支持csh。 ((sum=10+2*((((3+1))*((5-1))/2))));echo $sum; 運算方式三:
    expr命令
    適用范圍:包括bash、ksh、csh、sh的大部分shell,但有一點要特別注意就是一定要轉義shell環境下的特殊字符。 要特別注意:
    必須對表達式 (Expression) 參數應用以下規則
    用空格隔開每個項;
    用 (反斜杠)放在 shell 需要轉義的字符前;
    對包含空格和其他特殊字符的字符串 (字符參與運算) 要用引號括起來; expr ( 10 + 2 * ( ( 3 + 1 ) * ( 5 - 1 ) / 2 ) )
    通用的做法是:"(" ")" "|" "!" 和 "*" ">" "<"都需要轉義。 更多信息請查看其幫助,man expr 運算方式四:
    awk命令 適用范圍:這種方法是一種機變吧,適用于所有系統中包含了awk命令的shell環境,而且支持的數字函數也很多。 使用awk,由于awk的命令內部使用的是類C的,所以也不用考慮括號會被識別為其它子程序的情況。
    awk 'BEGIN{sum=10+2*((3+1)*(5-1)/2)} END{print sum}' /dev/null
    至于awk都支持哪些數學函數,歡迎大家參照我后續的文章。 運算方式六:關于小數的處理
    bc命令 適用范圍:包括bash、ksh、csh、sh的大部分shell。 也許大家都注意到了,上面提到的方式除了使用awk命令以外,運算結果都是被四舍五入過的整數值,但是實際中精確地保留一定位數的小數也很必要,這時我們就要用到bc這個數學工具了。 如果要熟練地使用bc,不只要對bc命令有一定的了解,對于命令替換(Command Substitution)、命令重定向(Input? Redirect & Output? Redirect)也要有清晰的認識。 對于bc命令
    $ bc
    scale=4?#計算結果保留到小數點后四位
    10/2?
    5.0000
    obase=16?#計算的結果以十六進制表達
    ibase=10?#輸入的數值被識別為十進制
    10/2
    5.000
    17/2
    8.800
    scale=0?#運算結果為整數
    17/2
    8
    quit 這樣我們就可以通過bc命令來計算10+2*((3+1)*(5-1)/2)的值了,并且讓計算結果精確到小數點后的四位。
    # echo `echo "scale=4;10+2*((3+1)*(5-1)/2)" | bc `
    26.0000



    本文轉自xiaoyuwang 51CTO博客,原文鏈接:http://blog.51cto.com/wangxiaoyu/197658,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的Linux/unix不同shell环境下数值运算的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。