Linux shell 變數 數學 運算

2021-07-09 17:44:16 字數 3900 閱讀 9437

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 shell 指令碼中變數的數學計算

首先從乙個例子說起 x 1 1 echo x 你是不是期待著輸出2啊?讓你失望了,這樣輸出的結果是1 1。1 首先看第一類方法 宣告變數的型別 我對上述程式做出以下修改 declare i x x 1 1 echo x 在上述指令碼中我把x宣告為整型數字 integer 型別,這時輸出結果為2 或者...

Linux Shell變數使用

一 本地變數的使用 本地變數就如同區域性變數一樣,只在本shell中起作用。它不會影響到其他shell中的變數。1。顯示變數值 可以使用echo命令。需要注意的是,使用變數的時候必須在變數名前加上 符號 2。清除變數 使用unset命令可以清除命令。3。顯示所有本地shell變數 shell中預定義...

Linux shell 特殊變數

posix內建的shell變數 變數 意義 目前程序的引數個數 傳遞給當前程序的命令列引數。置於雙引號內,會展開為個別的引數。當前程序的命令列引數。置於雙引號內,則展開為一單獨引數 連字型大小 在引用時給予shell的選項 前一命令的退出狀態。shell程序的程序編號 process id 0 零 ...