Linux shell 整數運算 let [ ] (( )) expr以及 浮點數 bc用法(轉)


Abstract : 

1)  Linux shell 中使用 let , [ ] ,(( )) 三種運算符操作 shell 變量進行簡單的基本運算;
2)Linux shell 中使用 expr 與 bc 兩個程序實現高級運算;


1, Linux shell 變量的基本運算


數值作為常規變量直接賦值給變量,並且以字符串形式保存。

1.1 let 命令可以用於直接執行基本操作:
        
當我使用 let 的時候,我們不使用 $ 符號引用變量。

  1. no1=7;
  2. no2=8;
  3. echo "------------ let command -------------"
  4. let no1++;
  5. let no2--;
  6. let no1+=3;
  7. let no2-=5;
  8. let result=no1+no2;
  9. printf "let result=%d\n" $result;


1.2 " [ ] "運算符跟 let 命令很相似:

"[ ]" 運算符里面可以使用 $ 符號引用變量,同時支持變量名與運算符之間不帶空格。

  1. echo "----------------- [] operator ----------------"
  2. printf "no1:%d no2:%d \n" $no1 $no2;
  3. result1=$[ no1 + no2 ];
  4. printf "result1 = %d \n" $result1;
  5. result2=$[no1+no2 + 7];
  6. printf "result2 = %d \n" $result2;
  7. result3=$[ $no1+$no2+5 ];
  8. printf "result3 = %d \n" $result3;
  9. no2=$[ no2 + 1 ];
  10. printf "no1 = %d no2 = %d \n" $no1 $no2;

1.3 " (( )) " 運算符跟 " [ ] " 運算符一樣:
同樣支持使用 $ 符號引用變量進行基本運算,同時支持變量名與運算符之間不帶空格。
  1. echo "----------------- (( )) operator --------------"
  2. printf "no1: %d no2: %d \n" $no1 $no2;
  3. result1=$(( no1 + no2 ));
  4. printf "result1 = %d \n" $result1;
  5. result2=$((no1+no2+3));
  6. printf "result2 = %d \n" $result2;
  7. result3=$(( $no1+$no2 + 5))
  8. printf "result3 = %d \n" $result3;


1.4 "expr" 命令同樣可以用於變量的基本運算:
"expr" 命令同樣支持 $ 符號引用變量進行基本運算, 但是變量與運算符之間必須使用空格作為分隔符;
在使用 "expr" 命令對變量進行運算后,整個表達式必須使用 "  ·  expression  · " 的模式賦值給變量,即包含在  " `  " 符里面,
並且等效於 " $(  expression ) " 模式。

  1. echo "---------------- expr command ---------------"
  2. printf "no1: %d no2: %d \n" $no1 $no2;
  3. result1=`expr 3 + 4`;
  4. printf "result1 = %d \n" $result1;
  5. result2=`expr $no1 + 4`;
  6. printf "result2 = %d \n" $result2;
  7. result3=`expr $no1 + $no2`;
  8. printf "result3 = %d \n" $result3;
  9. result4=`expr $no1+$no2`;
  10. printf "result4 = %d \n" $result4;
  11. result5=$(expr $no1 + 3);
  12. printf "result5 = %d \n" $result5;
  13. result6=$(expr $no1+4);
  14. printf "result6 = %d \n" $result6;
  15. result7=$(expr $no1+$no2);
  16. printf "result7 = %d \n" $result7;

由上圖實驗結果所示," expr " 命令的表達式中,變量與運算符之間必須使用空格作為分隔符,
有一點我沒搞明白的就是為什么42行的表達式已經錯了,為什么在43行才報錯。
" expr " 還支持許多運算表達式,大家在終端打個 expr --help 命令看看吧,o(∩_∩)o 哈哈。。。

上面所述的四種shell中 執行變量運算的方式中不支持浮點運算!

2, Linux shell 中使用 bc 命令實現高級數學運算:

bc有三個參數,scale是運算精度,ibase指定輸入變量的記數進制;obase指定輸出變量的記數進制;
bc 命令使用 標准輸入 stdin 作為輸入;
bc 是一個支持精確的浮點運算的高級計算器;
bc 擁有相當多的輸入選項,並且支持數學函數調用;
執行 bc --help 自行查看 bc 所支持的輸入選項;

2.1 bc 命令使用標准輸入 stdin 作為輸入,並且支持浮點運算:
  1. echo "----------------- bc command ----------------"
  2. echo "4 * 0.56" | bc;
  3. no=48;
  4. result1=`echo "$no * 1.5" | bc`;
  5. echo "result1 = $result1";


2.2 bc 命令支持運算精度設置:

通過附加參數可以給 bc 指定運算精度;指定輸入變量的記數進制;
附加參數使用分號 " ; " 作為分隔符;

  1. result2=`echo "scale=9;$no / 3;" | bc`;
  2. echo "result2 = $result2";


實驗結果所示,使用分號 " ; "  加入附加參數 scale ,指定精度為 9 位小數;

2.3 使用 bc 進行數值的記數進制間轉換:

通過 ibase=value 作為附加參數,指定輸入變量的記數進制;
通過 obase=value 作為附加參數,指定輸出變量的記數進制;

  1. no=100;
  2. echo "echo \"obase=2;ibase=10;$no\" | bc = `echo "obase=2;ibase=10;$no" | bc`";
  3. no=1000;
  4. echo "echo \"scale=5;obase=10;ibase=2;$no/3\" | bc = `echo "scale=5;obase=10;ibase=2;$no/3" | bc`";

2.4 使用 bc 調用數學公式進行高級數學運算:

" sqrt(value) " 執行 value 的開方運算;
" value^index " 執行 value 的冪運算;

  1. echo "sqrt(100) = `echo "sqrt(100)" | bc`";
  2. echo "sqrt(100) = $(echo "sqrt(100)" | bc)";
  3. echo "10^3 = `echo "10^3" | bc`";
  4. echo "10^3 = $(echo "10^3" | bc)";




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM