Linux shell變數數學運算

來源:互聯網
上載者:User

標籤:

Linux shell變數數學運算

Abstract : 
1)  Linux shell 中使用 let , [ ] ,(( )) 三種運算子操作 shell 變數進行簡單的基本運算;
2)Linux shell 中使用 expr 與 bc 兩個程式實現進階運算;

1, Linux shell 變數的基本運算

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

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

no1=7;
no2=8;

echo "------------ let command -------------"
let no1++;
let no2--;
let no1+=3;
let no2-=5;
let result=no1+no2;
printf "let result=%d\n" $result;

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

"[ ]" 運算子裡面可以使用 $ 符號引用變數,同時支援變數名與運算子之間不帶空格。
echo "----------------- [] operator ----------------"
printf "no1:%d no2:%d \n" $no1 $no2;
result1=$[ no1 + no2 ];
printf "result1 = %d \n" $result1;
result2=$[no1+no2 + 7];
printf "result2 = %d \n" $result2;
result3=$[ $no1+$no2+5 ];
printf "result3 = %d \n" $result3;
no2=$[ no2 + 1 ];
printf "no1 = %d no2 = %d \n" $no1 $no2;


1.3 " (( )) " 運算子跟 " [ ] " 運算子一樣:
同樣支援使用 $ 符號引用變數進行基本運算,同時支援變數名與運算子之間不帶空格。

echo "----------------- (( )) operator --------------"
printf "no1: %d no2: %d \n" $no1 $no2;
result1=$(( no1 + no2 ));
printf "result1 = %d \n" $result1;
result2=$((no1+no2+3));
printf "result2 = %d \n" $result2;
result3=$(( $no1+$no2 + 5))
printf "result3 = %d \n" $result3;

1.4 "expr" 命令同樣可以用於變數的基本運算:
"expr" 命令同樣支援 $ 符號引用變數進行基本運算,但是變數與運算子之間必須使用空格作為分隔字元;
在使用 "expr" 命令對變數進行運算後,整個運算式必須使用 " · expression · " 的模式賦值給變數,即包含在 " ` " 符裡面,
並且等效於 " $( expression ) " 模式。
echo "---------------- expr command ---------------"
printf "no1: %d no2: %d \n" $no1 $no2;
result1=`expr 3 + 4`;
printf "result1 = %d \n" $result1;
result2=`expr $no1 + 4`;
printf "result2 = %d \n" $result2;
result3=`expr $no1 + $no2`;
printf "result3 = %d \n" $result3;
result4=`expr $no1+$no2`;
printf "result4 = %d \n" $result4;
result5=$(expr $no1 + 3);
printf "result5 = %d \n" $result5;
result6=$(expr $no1+4);
printf "result6 = %d \n" $result6;
result7=$(expr $no1+$no2);
printf "result7 = %d \n" $result7;

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

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

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

bc 命令使用 標準輸入 stdin 作為輸入;
bc 是一個支援精確的浮點運算的進階計算機;
bc 擁有相當多的輸入選項,並且支援數學函數調用;
執行 bc --help 自行查看 bc 所支援的輸入選項;

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


2.2 bc 命令支援運算精度設定:
通過附加參數可以給 bc 指定運算精度;
附加參數使用分號 " ; " 作為分隔字元;
result2=`echo "scale=9;$no / 3;" | bc`;
echo "result2 = $result2";


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

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

通過 ibase=value 作為附加參數,指定輸入變數的記數進位;
通過 obase=value 作為附加參數,指定輸出變數的記數進位;
no=100;
echo "echo \"obase=2;ibase=10;$no\" | bc = `echo "obase=2;ibase=10;$no" | bc`";
no=1000;
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 的冪運算;
echo "sqrt(100) = `echo "sqrt(100)" | bc`";
echo "sqrt(100) = $(echo "sqrt(100)" | bc)";
echo "10^3 = `echo "10^3" | bc`";
echo "10^3 = $(echo "10^3" | bc)";

 

 

    • 本文來自:Linux學習教程網

Linux shell變數數學運算

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.