新聞中心
Abstract :
1) Linux shell 中使用 let , [ ] ,(( )) 三種運(yùn)算符操作 shell 變量進(jìn)行簡(jiǎn)單的基本運(yùn)算;
2)Linux shell 中使用 expr 與 bc 兩個(gè)程序?qū)崿F(xiàn)高級(jí)運(yùn)算;
1, Linux shell 變量的基本運(yùn)算
數(shù)值作為常規(guī)變量直接賦值給變量,并且以字符串形式保存。
1.1 let 命令可以用于直接執(zhí)行基本操作:
當(dāng)我使用 let 的時(shí)候,我們不使用 $ 符號(hào)引用變量。
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 " [ ] "運(yùn)算符跟 let 命令很相似:
"[ ]" 運(yùn)算符里面可以使用 $ 符號(hào)引用變量,同時(shí)支持變量名與運(yùn)算符之間不帶空格。
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 " (( )) " 運(yùn)算符跟 " [ ] " 運(yùn)算符一樣:
同樣支持使用 $ 符號(hào)引用變量進(jìn)行基本運(yùn)算,同時(shí)支持變量名與運(yùn)算符之間不帶空格。
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" 命令同樣可以用于變量的基本運(yùn)算:
"expr" 命令同樣支持 $ 符號(hào)引用變量進(jìn)行基本運(yùn)算,但是變量與運(yùn)算符之間必須使用空格作為分隔符;
在使用 "expr" 命令對(duì)變量進(jìn)行運(yùn)算后,整個(gè)表達(dá)式必須使用 " ·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;
由上圖實(shí)驗(yàn)結(jié)果所示," expr " 命令的表達(dá)式中,變量與運(yùn)算符之間必須使用空格作為分隔符,
有一點(diǎn)我沒(méi)搞明白的就是為什么42行的表達(dá)式已經(jīng)錯(cuò)了,為什么在43行才報(bào)錯(cuò)。
" expr " 還支持許多運(yùn)算表達(dá)式,大家在終端打個(gè) expr --help 命令看看吧,o(∩_∩)o 哈哈。。。
上面所述的四種shell中執(zhí)行變量運(yùn)算的方式中不支持浮點(diǎn)運(yùn)算!
2, Linux shell 中使用 bc 命令實(shí)現(xiàn)高級(jí)數(shù)學(xué)運(yùn)算:
bc 命令使用 標(biāo)準(zhǔn)輸入 stdin 作為輸入;
bc 是一個(gè)支持精確的浮點(diǎn)運(yùn)算的高級(jí)計(jì)算器;
bc 擁有相當(dāng)多的輸入選項(xiàng),并且支持?jǐn)?shù)學(xué)函數(shù)調(diào)用;
執(zhí)行 bc --help 自行查看 bc 所支持的輸入選項(xiàng);
2.1 bc 命令使用標(biāo)準(zhǔn)輸入 stdin 作為輸入,并且支持浮點(diǎn)運(yùn)算:
echo "----------------- bc command ----------------"
echo "4 * 0.56" | bc;
no=48;
result1=`echo "$no * 1.5" | bc`;
echo "result1 = $result1";
2.2 bc 命令支持運(yùn)算精度設(shè)置:
通過(guò)附加參數(shù)可以給 bc 指定運(yùn)算精度;
附加參數(shù)使用分號(hào) " ; " 作為分隔符;
result2=`echo "scale=9;$no / 3;" | bc`;
echo "result2 = $result2";
實(shí)驗(yàn)結(jié)果所示,使用分號(hào) " ; " 加入附加參數(shù) scale ,指定精度為 9 位小數(shù);
2.3 使用 bc 進(jìn)行數(shù)值的記數(shù)進(jìn)制間轉(zhuǎn)換:
通過(guò) ibase=value 作為附加參數(shù),指定輸入變量的記數(shù)進(jìn)制;
通過(guò) obase=value 作為附加參數(shù),指定輸出變量的記數(shù)進(jìn)制;
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 調(diào)用數(shù)學(xué)公式進(jìn)行高級(jí)數(shù)學(xué)運(yùn)算:
" sqrt(value) " 執(zhí)行 value 的開(kāi)方運(yùn)算;
" value^index " 執(zhí)行 value 的冪運(yùn)算;
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)";
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站題目:shell運(yùn)算(加、減、乘、除)-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.ef60e0e.cn/article/cdsohj.html