真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

shell變量的數(shù)值計(jì)算詳解

如果要執(zhí)行算術(shù)運(yùn)算,就會(huì)離不開(kāi)各種運(yùn)算符號(hào),和其他編程語(yǔ)言類似,Shell也有很多算術(shù)運(yùn)算符。

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),微山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:微山等地區(qū)。微山做網(wǎng)站價(jià)格咨詢:13518219792

常見(jiàn)的運(yùn)算符號(hào),如圖:
shell變量的數(shù)值計(jì)算詳解
常見(jiàn)的運(yùn)算命令,如圖:
shell變量的數(shù)值計(jì)算詳解
下面詳細(xì)介紹一下,各種運(yùn)算命令的詳細(xì)用法:

一、雙小括號(hào)“(())”數(shù)值運(yùn)算命令

雙小括號(hào)“(())”的作用是進(jìn)行數(shù)值運(yùn)算與數(shù)值比較,它的效率很高,用法靈活,是企業(yè)場(chǎng)景中運(yùn)維人員經(jīng)常采用的運(yùn)算操作符,具體操作語(yǔ)法,如圖:
shell變量的數(shù)值計(jì)算詳解
詳細(xì)介紹其使用方法:

進(jìn)行簡(jiǎn)單的運(yùn)算,如下:

[root@localhost ~]# echo $((1+1))
2
//計(jì)算1+1的結(jié)果再輸入
[root@localhost ~]# ((i=5))
[root@localhost ~]# ((i=i*2))
[root@localhost ~]# echo $i
10
//首先定義i的值,其次進(jìn)行運(yùn)算,最后輸出結(jié)果

稍微復(fù)雜一些的綜合運(yùn)算,如下:

[root@localhost ~]# ((a=1+2**3-4%3)) && echo $a
8
//“**”表示幾次方的意思,“%”表示取余的意思
//計(jì)算順序就是先乘除再加減,
//最后通過(guò)echo輸出結(jié)果

特殊符號(hào)運(yùn)算示例:

[root@localhost ~]# a=1
[root@localhost ~]# echo $((a=a+1))
2
//將“a+1”重新賦值給a,然后輸出結(jié)果
[root@localhost ~]# echo $((a+=1))
3
//“+=”表示“a=a+1”,重新復(fù)制給a
[root@localhost ~]# echo $((a**2))
9
//“**”表示冪次方,現(xiàn)在a的值是3,平方當(dāng)然是9

利用“(())”雙括號(hào)進(jìn)行比較及判斷示例:

[root@localhost ~]# echo $((1<2))
1
//1表示結(jié)果的成立的,相反,0則表示結(jié)果不成立
[root@localhost ~]# echo $((2<1))
0

上面示例中所涉及到的數(shù)字及變量必須為整數(shù),不能是小數(shù)點(diǎn)及字符串。

特殊符號(hào)“++”、“--”所表示的含義:

[root@localhost ~]# a=10
[root@localhost ~]# echo $((a++))
10
[root@localhost ~]# echo $a
11
[root@localhost ~]# echo $((a--))
11
[root@localhost ~]# echo $a
10
[root@localhost ~]# echo $((--a))
9
[root@localhost ~]# echo $a
9
[root@localhost ~]# echo $((++a))
10
[root@localhost ~]# echo $a
10

通過(guò)示例可以看出:執(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)算后的值。

“(())”表達(dá)式在命令行執(zhí)行時(shí)不需要加$符號(hào),直接使用((6%2))形式即可,但是如果需要輸出,就要加$符,例如:echo$((6%2))。
·“(())”里的所有字符之間沒(méi)有空格、有一個(gè)或多個(gè)空格都不會(huì)影響結(jié)果。

shell腳本小示例:

簡(jiǎn)單的復(fù)雜運(yùn)算的腳本

第一種,不太實(shí)用:

[root@bogon ~]# vim test.sh
#!/bin/bash
a=6
b=2
echo "$a-$b=$(($a-$b))"
echo "$a+$b=$(($a+$b))"
echo "$a*$b=$(($a*$b))"
echo "$a/$b=$(($a/$b))"
echo "$a**$b=$(($a**$b))"
echo "$a%$b=$(($a%$b))"
[root@bogon ~]# sh test.sh
6-2=4
6+2=8
6*2=12
6/2=3
6**2=36
6%2=0

第二種,實(shí)用:

[root@bogon ~]# vim test1.sh 
#!/bin/bash
echo "$1-$2=$(($1-$2))"
echo "$1+$2=$(($1+$2))"
echo "$1*$2=$(($1*$2))"
echo "$1/$2=$(($1/$2))"
echo "$1**$2=$(($1**$2))"
echo "$1%$2=$(($1%$2))"
[root@bogon ~]# sh test1.sh 10 2
10-2=8
10+2=12
10*2=20
10/2=5
10**2=100
10%2=0

使用read命令等待輸入,

第一種方法:

[root@bogon ~]# vim test2.sh
#!/bin/bash
print_usage(){
#定義一個(gè)整數(shù)
        printf "Please enter an integer\n"
        #打印信息“請(qǐng)輸入一個(gè)整數(shù)”
        exit 1
        #返回值為1,退出腳本
}
read -p "Please input first number:" A
#請(qǐng)輸入第一個(gè)數(shù)字
if [ -n "`echo ${A}|sed 's/[0-9]//g'`" ]
#判斷是否為整數(shù),用0-9替換$A的值,進(jìn)而判斷是否為數(shù)字
then
        print_usage
        #如果上述變量值不為空,說(shuō)明不是整數(shù),則調(diào)用用戶幫助函數(shù)
fi
read -p "Please input the operators:" B
#請(qǐng)輸入操作符
if [ "${B}" != "+" ] && [ "${B}" != "-" ] && [ "${B}" != "*" ] && [ "${B}" != "/" ] && [ "${B}" != "%" ] && [ "${B}" != "**" ]
#判斷輸入的內(nèi)容是否為+、-、*、/、%、**
then
        echo "Please use{+|-|*|/|%|**}"
        #如果操作符不符合要求,則給出提示
        exit 2
        #因?yàn)椴环弦?,因此以返回值?退出腳本,表示錯(cuò)誤
fi
read -p "Please input second number: " C
#請(qǐng)輸入第二個(gè)數(shù)字
if [ -n "`echo ${C}|sed 's/[0-9]//g'`" ]
#判斷是否為整數(shù),用0-9替換$C的值,進(jìn)而判斷是否為數(shù)字
then
        print_usage
        #如果上述變量值不為空,說(shuō)明不是整數(shù),則調(diào)用用戶幫助函數(shù)
fi
echo "${A}${B}${C}=$((${A}${B}${C}))"
#最后輸出結(jié)果
[root@bogon ~]# sh test2.sh
Please input first number:10
Please input the operators:/
Please input second number: 2
10/2=5

第二種:

[root@bogon ~]# vim test3.sh
#!/bin/bash
print_usage(){
    printf $"USAGE:$0 NUM1 {+|-|*|/} NUM2\n"
    #打印幫助信息
    exit 1
}
if [ $# -ne 3 ]
#如果腳本傳入的參數(shù)個(gè)數(shù)不等于3個(gè)(因?yàn)橐斎雰蓚€(gè)數(shù)字及一個(gè)運(yùn)算符號(hào))。
then
    print_usage
    #則調(diào)用用戶幫助函數(shù)。
fi
A=$1
C=$3
B=$2
if [ -n "`echo ${A}|sed 's/[0-9]//g'`" ]
then
    print_usage
fi
if [ "${B}" != "+" ] && [ "${B}" != "-" ] && [ "${B}" != "*" ] && [ "${B}" != "/" ]
#判斷第二個(gè)輸入的操作符是否為+、-、*、/
then
    print_usage
fi
if [ -n "`echo ${C}|sed 's/[0-9]//g'`" ]
then
    print_usage
fi
echo "${A}${B}${C}=$((${A}${B}${C}))"
[root@bogon ~]# sh test3.sh 10 + 2
10+2=12
[root@bogon ~]# sh test3.sh 10 - 2
10-2=8
[root@bogon ~]# sh test3.sh 10 \* 2
10*2=20
[root@bogon ~]# sh test3.sh 10 / 2
10/2=5

最簡(jiǎn)單、高效的一種辦法就是:

[root@bogon ~]# cat test4.sh
echo $(($1))
//利用兩個(gè)雙括號(hào)計(jì)算
[root@bogon ~]# sh test4.sh 5+5
10
[root@bogon ~]# sh test4.sh "5 + 5"
10
//如果帶空格使用雙引號(hào)

二、let運(yùn)算命令用法

let賦值表達(dá)式的功能等同于“((賦值表達(dá)式))”
比如:

[root@bogon ~]# i=2
[root@bogon ~]# i=i+8
[root@bogon ~]# echo $i
i+8
//開(kāi)頭不用let,輸出時(shí)并不會(huì)輸出計(jì)算結(jié)果
[root@bogon ~]# unset i
[root@bogon ~]# i=2
[root@bogon ~]# let i=i+8
[root@bogon ~]# echo $i
10
//使用let開(kāi)頭,輸出是則會(huì)輸出計(jì)算結(jié)果
[root@bogon ~]# ((i=i+10))
[root@bogon ~]# echo $i
20

let i=i+8與((i=i+8))效果一樣,推薦使用第二種!

三、expr命令的用法

expr命令既可以用于整數(shù)運(yùn)算,也可用于相關(guān)字符串長(zhǎng)度、匹配等的運(yùn)算處理!

1.expr用于計(jì)算
[root@bogon ~]# expr 2 + 2
4
[root@bogon ~]# expr 2 - 2
0
[root@bogon ~]# expr 2 \* 2
4
//需要使用轉(zhuǎn)義符“\”
[root@bogon ~]# expr 2 / 2
1

在使用expr命令時(shí):

  • 運(yùn)算符及用于就算的數(shù)字左右都至少有一個(gè)空格,否則會(huì)報(bào)錯(cuò);
  • 使用星號(hào)時(shí),必須使用轉(zhuǎn)義符“\”,否則shell會(huì)錯(cuò)誤的理解星號(hào)的作用;
2.expr配合變量進(jìn)行計(jì)算

expr可配合變量進(jìn)行計(jì)算,但需要用反引號(hào)將計(jì)算表達(dá)式括起來(lái)。比如:

[root@bogon ~]# i=5
[root@bogon ~]# i=`expr $i + 5`
//注意變量和數(shù)字兩邊要有空格
[root@bogon ~]# echo $i
10
3.判斷一個(gè)變量值或字符串是否為整數(shù)

原理:利用以expr做計(jì)算時(shí)變量或字符串必須是整數(shù)的原則,把一個(gè)變量或字符串和一個(gè)已知的整數(shù)(非0)相加,看命令執(zhí)行的結(jié)果是否為0。如果是0,就認(rèn)為做加法的變量或字符串為整數(shù);反之則不是。比如:

[root@bogon ~]# i=5
[root@bogon ~]# expr $i + 6 &>/dev/null
[root@bogon ~]# echo $?
0
[root@bogon ~]# i=a
[root@bogon ~]# expr $i + 6 &>/dev/null
[root@bogon ~]# echo $?
2

腳本示例:

第一種:

[root@bogon ~]# vim test.sh
#!/bin/bash
expr $1 + 1 &> /dev/null
if      [ $? -eq 0 ]
then
        echo int 
else
        echo chars
fi
[root@bogon ~]# sh -x test.sh 12
+ expr 12 + 1
+ '[' 0 -eq 0 ']'
+ echo int
int
[root@bogon ~]# sh -x test.sh qq
+ expr qq + 1
+ '[' 2 -eq 0 ']'
+ echo chars
chars

第二種

[root@bogon ~]# vim test1.sh
#!/bin/bash
while true
do
        read -p "Please input:" A
        expr $A + 1 &>/dev/null
        if      [ $? -eq 0 ]
        then
                echo int
        else
                echo chars
        fi
done
[root@bogon ~]# sh test1.sh
Please input:1
int
Please input:q
chars
//這樣的腳本是永遠(yuǎn)等待輸入,并判斷;
//如果只希望判斷一次就結(jié)束,把while循環(huán)語(yǔ)句刪除即可!
4.通過(guò)expr計(jì)算字符串的長(zhǎng)度
[root@bogon ~]# a=dfdfdfdfdfd
[root@bogon ~]# expr length "$a"
11
[root@bogon ~]# echo ${#a}
11
[root@bogon ~]# echo ${a} | wc -L
11
[root@bogon ~]# echo ${a} | awk '{print length($0)}'
11

四、bc命令的用法

bc是Linux下的計(jì)算機(jī),除了可以作為計(jì)算機(jī)來(lái)使用,還可以作為命令工具來(lái)使用!

bc命令作為計(jì)算機(jī)使用:

[root@bogon ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+2
3

bc命令在命令行進(jìn)行計(jì)算:

[root@bogon ~]# echo 3+5 | bc
8
[root@bogon ~]#  echo "scale=2;355/113"|bc
3.14
//使用scale=2保留兩位小數(shù)。

五、awk實(shí)現(xiàn)計(jì)算

利用awk進(jìn)行運(yùn)算的效果也很好,適合小數(shù)和整數(shù),特別是命令行計(jì)算,尤其是小數(shù),運(yùn)算很精確,好用。比如:

[root@bogon ~]# echo "1.2 1.3" | awk '{print $1+$2}'
2.5
[root@bogon ~]# echo "10 10" | awk '{print ($1+10)/$2}'
2

六、$[]的使用方法

示例:

[root@bogon ~]# i=10
[root@bogon ~]# i=$[i+10] && echo $i
20
[root@bogon ~]# echo $[2*3]
6
[root@bogon ~]# echo $[2-3]
-1

這次就簡(jiǎn)單介紹這么多!

———————— 本文至此結(jié)束,感謝閱讀 ————————


文章名稱:shell變量的數(shù)值計(jì)算詳解
文章轉(zhuǎn)載:http://weahome.cn/article/psipjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部