您好,登錄后才能下訂單哦!
雙小括號(hào)“ ( ( ) ) ”的作用是進(jìn)行數(shù)值運(yùn)算與數(shù)值比較,它的效率最高,用法靈活,是經(jīng)常被采用的運(yùn)算操作符,其操作方法如下:
執(zhí)行echo$((a++))和echo$((a--))命令輸出整個(gè)表達(dá)式時(shí),輸出的值即為a的值,表達(dá)式執(zhí)行完畢后,會(huì)對(duì)a進(jìn)行++、--的運(yùn)算,而執(zhí)行echo$((++a))和echo$((--a))命令輸出整個(gè)表達(dá)式時(shí),會(huì)先對(duì)a進(jìn)行++、--的運(yùn)算,然后再輸出表達(dá)式的值,即為a運(yùn)算后的值。
注意:有關(guān)++、--運(yùn)算的記憶方法:
- 變量a在運(yùn)算符之前,輸出表達(dá)式的值為a,然后a自增或自減;變量a在運(yùn)算符之后,輸出表達(dá)式會(huì)先自增或自減,表達(dá)式的值就是自增或自減后a的值。
- “(())”表達(dá)式在命令行執(zhí)行時(shí)不需要加$符號(hào),直接使用((6%2))形式即可,但是如果需要輸出,就要加$符,例如:echo$((6%2))。
- “(())”里的所有字符之間沒(méi)有空格、有一個(gè)或多個(gè)空格都不會(huì)影響結(jié)果。
使用舉例:
[root@localhost ~]# echo $(( 6+2 )) #加法
8
[root@localhost ~]# echo $(( 6-2 )) #減法
4
[root@localhost ~]# echo $(( 6*2 )) #乘法
12
[root@localhost ~]# echo $(( 6/2 )) #除法
3
[root@localhost ~]# echo $(( 6%2 )) #取余
0
[root@localhost ~]# echo $(( 6**2 )) #求平方
36
[root@localhost ~]# a=3 #給變量賦值
[root@localhost ~]# echo $(( a++ )) #先輸出變量值,再+1
3
[root@localhost ~]# echo ${a} #再查看變量,發(fā)現(xiàn)+1了
4
[root@localhost ~]# echo $(( a-- )) #先輸出變量值,再-1
4
[root@localhost ~]# echo ${a} #再查看變量,發(fā)現(xiàn)-1了
3
[root@localhost ~]# echo $(( ++a )) #先+1,再輸出變量值,輸出的是+1后的值
4
[root@localhost ~]# echo ${a} #確認(rèn)變量值
4
[root@localhost ~]# echo $(( --a )) #先-1,再輸出變量值
3
[root@localhost ~]# echo ${a} #查看確認(rèn)
3
let賦值表達(dá)式的功能等同于“((賦值表達(dá)式))”
使用舉例:
[root@localhost ~]# i=1
[root@localhost ~]# echo $i
1
[root@localhost ~]# let i=i+8 #加8
[root@localhost ~]# echo $i #輸出
9
[root@localhost ~]# let i=i-1 #i-1
[root@localhost ~]# echo $i #輸出
8
[root@localhost ~]# let i++ #我在shell script中常使用這種方法,默認(rèn)+1
[root@localhost ~]# echo $i
9
[root@localhost ~]# let i-- #i-1
[root@localhost ~]# echo $i
8
作用:
expr(evaluate(求值)expressions(表達(dá)式))命令既可以用于整數(shù)運(yùn)算,也可以用于相關(guān)字符串長(zhǎng)度、匹配等的運(yùn)算處理。
(1)expr用于計(jì)算:
[root@localhost ~]# expr 2 + 3
5
[root@localhost ~]# expr 2 \* 3 #*號(hào)需要轉(zhuǎn)義后使用
6
[root@localhost ~]# expr 6 / 3
2
[root@localhost ~]# expr 7 % 3
1
在使用expr時(shí)需要注意:
- 運(yùn)算符及用于計(jì)算的數(shù)字左右都至少有一個(gè)空格,否則會(huì)報(bào)錯(cuò)。
- 使用乘號(hào)時(shí),必須用反斜杠將其進(jìn)行轉(zhuǎn)義(轉(zhuǎn)為普通字符),因?yàn)镾hell可能會(huì)誤解星號(hào)的含義。
(2)expr配合變量計(jì)算
[root@localhost ~]# i=5
[root@localhost ~]# i=`expr ${i} + 5` #需要使用反撇號(hào)將其括起來(lái),注意變量和數(shù)字符號(hào)兩邊要有空格
[root@localhost ~]# echo ${i}
10
(3)判斷一個(gè)變量值或字符串是否為整數(shù)
實(shí)現(xiàn)原理是,利用以expr做計(jì)算時(shí)變量或字符串必須是整數(shù)的規(guī)則,把一個(gè)變量或字符串和一個(gè)已知的整數(shù)(非0)相加,看命令返回的值是否為0。如果為0,就認(rèn)為做加法的變量或字符串為整數(shù),否則就不是整數(shù)。
示例1:
[root@localhost ~]# a=2
[root@localhost ~]# expr ${a} + 5
7
[root@localhost ~]# echo $? #輸出為0,說(shuō)明變量a是一個(gè)整數(shù)
0
[root@localhost ~]# b=lvjianzhao #定義一個(gè)字符變量
[root@localhost ~]# expr $ + 5 #實(shí)際上會(huì)直接報(bào)錯(cuò)
expr: 非整數(shù)參數(shù)
[root@localhost ~]# echo $? #輸出為非0,則表示變量b不是一個(gè)整數(shù)
2
示例2:
[root@localhost ~]# vim test.sh
#!/bin/bash
expr $1 + 4 &> /dev/null
if [ $? -eq 0 ]
then
echo int
else
echo chars
fi
[root@localhost ~]# sh test.sh aaa
chars #輸出的結(jié)果是字符串
[root@localhost ~]# sh test.sh 34
int #輸出的結(jié)果是整數(shù)型
示例3:
#!/bin/bash
tuichu(){
exit 1
}
while true
do
read -p "pls input:" a
if [ $a == exit ]
then
tuichu #調(diào)用開(kāi)頭定義的函數(shù)
fi
expr $a + 0 > /dev/null 2>&1
[ $? -eq 0 ] && echo int || echo chars
done
[root@localhost ~]# sh test.sh #執(zhí)行腳本
pls input:22 #輸入數(shù)字進(jìn)行測(cè)試
int
pls input:dfdf #輸入字符進(jìn)行測(cè)試
chars
pls input:exit #輸入exit,將觸發(fā)函數(shù),而退出腳本,若不定義這個(gè)函數(shù),只能通過(guò)ctrl+c強(qiáng)制中斷腳本執(zhí)行
chars
[root@localhost ~]#
(1)直接在命令模式下輸入bc,按下回車(chē)后即可直接使用,如下:
[root@localhost ~]# bc #輸入bc進(jìn)入計(jì)算機(jī)環(huán)境
bc 1.06.95
........................#省略部分內(nèi)容
1+8 #輸入后按回車(chē)即可得到結(jié)果
9
9/3
3
6*2
12
(2)將bc用在命令行下面,以實(shí)現(xiàn)運(yùn)算功能:
[root@localhost ~]# echo 3+4 | bc #通過(guò)echo命令結(jié)合管道符輸出到bc計(jì)算機(jī)
7
[root@localhost ~]# echo "3.4+5.6" | bc
9.0
[root@localhost ~]# echo "3.2-2.5" | bc
.7
[root@localhost ~]# echo "scale=2;355/113" | bc #使用scale參數(shù)可以設(shè)置保留的小數(shù)位
3.14
[root@localhost ~]# echo "scale=6;355/113" | bc
3.141592
(3)利用bc配合變量運(yùn)算:
[root@localhost ~]# i=5
[root@localhost ~]# i=`echo $i+6|bc` 利用echo輸出,通過(guò)管道符交給bc,此方法效率較低,一般不使用。
[root@localhost ~]# echo $i
11
提示:根據(jù)bc所具有的特殊性來(lái)看,如果是小數(shù),則選擇bc運(yùn)算沒(méi)有問(wèn)題(更推薦使用awk);若是整數(shù)場(chǎng)景,可用“( ( ) )”、let、expr等。
(4)使用一條命令計(jì)算輸出1+2+3....+10的表達(dá)式,并計(jì)算結(jié)果(使用bc計(jì)算機(jī)實(shí)現(xiàn))
生成1+2+3....+10表達(dá)式的方法有:
[root@localhost ~]# seq -s "+" 10 #seq是生成數(shù)字序列,-s是指定數(shù)字序列之間的分隔符
1+2+3+4+5+6+7+8+9+10
[root@localhost ~]# echo {1..10} | tr " " "+" #生成以空格為間隔的數(shù)字序列,并交給tr將空格替換為+號(hào)
1+2+3+4+5+6+7+8+9+10
實(shí)現(xiàn)上面需求的多種方法如下:
#使用bc計(jì)算
[root@localhost ~]# echo `seq -s "+" 10`=`seq -s "+" 10 | bc`
1+2+3+4+5+6+7+8+9+10=55
#使用(())計(jì)算
[root@localhost ~]# echo `seq -s "+" 10`=$((`seq -s "+" 10`))
1+2+3+4+5+6+7+8+9+10=55
#使用expr計(jì)算
[root@localhost ~]# echo `seq -s '+' 10`=`seq -s " + " 10|xargs expr`
1+2+3+4+5+6+7+8+9+10=55
使用$[ ] 來(lái)計(jì)算
[root@localhost ~]# echo `seq -s '+' 10`=$(echo $[ `seq -s '+' 10` ])
1+2+3+4+5+6+7+8+9+10=55
利用awk進(jìn)行運(yùn)算的效果也很好,適合小數(shù)和整數(shù),特別是命令行計(jì)算,尤其是小數(shù),運(yùn)算很精準(zhǔn),好用。
使用舉例:
[root@localhost ~]# echo "7.7 8.5" |awk '{print ($1-$2)}'
-0.8
[root@localhost ~]# echo "7.7 3.5" |awk '{print ($1-$2)}'
4.2
[root@localhost ~]# echo "358 114" | awk '{print ($1-2)/$2}'
3.12281
[root@localhost ~]# echo "3 8" | awk '{print ($1+3)*$2}'
48
需要使用typeset定義整數(shù)變量,直接進(jìn)行計(jì)算,這個(gè)方法不常用,因?yàn)樾枰x才能生效。
使用范例:
[root@localhost ~]# declare -i A=20 B=3 #-i參數(shù)可以將變量定義為整型
[root@localhost ~]# A=A+B #因?yàn)橐崖暶魇钦?,因此可以直接進(jìn)行運(yùn)算了。
[root@localhost ~]# echo $A #輸出查看
23
格式基本如下(至于運(yùn)算符,則和其他的運(yùn)算工具一樣):
[root@localhost ~]# i=4
[root@localhost ~]# i=$[i+3]
[root@localhost ~]# echo ${i}
7
[root@localhost ~]# echo $[2*3]
6
[root@localhost ~]# echo $[9/3]
3
[root@localhost ~]# echo $[10%3]
1
[root@localhost ~]# echo $[1%3]
1
[root@localhost ~]# echo $[3/2]
1
———————— 本文至此結(jié)束,感謝閱讀 ————————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。