溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

shell 之 數(shù)學(xué)計算 &引用(三)

發(fā)布時間:2020-08-04 10:35:08 來源:網(wǎng)絡(luò) 閱讀:1697 作者:上帝之子521 欄目:開發(fā)技術(shù)

        今天我們來看看 shell 中的數(shù)學(xué)計算和引用。在 shell 中的計算方法有三種:1、expr;2、();3、let。下來我們來仔細的看看這三種數(shù)學(xué)計算:

        1、第一種:expr

            格式:expr 操作數(shù)1 操作符 操作數(shù)2

            舉例:

            ① expr 1 + 2      TMP=$(expr 1 + 2)

shell 之 數(shù)學(xué)計算 &引用(三)

            ② expr 1 + 4 / 3   TMP=$(expr 1 + 4 / 3)

shell 之 數(shù)學(xué)計算 &引用(三)

        由此我們可以看出在 expr 的數(shù)學(xué)計算中,它是不支持浮點數(shù)的計算的,另外在賦值變量的時候還有一種寫法。

            ③ expr 1 + 2 * 3(?)

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到在第一次執(zhí)行的時候報語法錯誤,這是因為在 bash 腳本中,* 被賦予0到任意一個字符,我們當做乘法運算時,必須得加上轉(zhuǎn)義符(\)才能進行正確的乘法計算。

        那么由此可以看出第一種數(shù)學(xué)計算的格式要求相對嚴格一點。

        2、第二種:()

            格式:$((操作數(shù)1 操作符 操作數(shù)2))

            舉例:TMP=$((1 +   3))

shell 之 數(shù)學(xué)計算 &引用(三)

        我們可以看出第二種數(shù)學(xué)計算的格式相對來說要求較松。

        3、第三種:let

            格式:let "[變量][操作符] 操作數(shù)1 操作符 操作數(shù)2"

            舉例:

            ① let "3+4"

            ② let "TMP=3+4"

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到第三種數(shù)學(xué)計算的格式要求松,而且計算靈活

        那么我們學(xué)習(xí) shell 中的數(shù)學(xué)計算有什么實際用途呢?下來我們就來看一個例子,一個簡單的腳本:

        當 /tmp 目錄下文件占用率達到 80% 時,對磁盤文件進行特定的清理,當達到設(shè)定值時對管理員發(fā)一封郵件報警。

        實現(xiàn)步驟:

        a> 使用 df 命令對 /tmp 目錄進行查看

shell 之 數(shù)學(xué)計算 &引用(三)

        b> 對磁盤占用率進行計算

shell 之 數(shù)學(xué)計算 &引用(三)

        我們之前說過它是不支持浮點數(shù)計算的,因此我們先 *100 再進行相除操作。我們看到在進行除法操作之后它的占用率不等于 13%,這是因為它還有一部分空間是給 root 用戶使用的。

        c> 判斷是否達到特定值,我們把之前的寫成一個腳本

#! /bin/bash

df /tmp

ABC=$(expr 5820284 \* 100 / 49410864)

echo $ABC

if [ $ABC -gt 10 ]
then
    echo "Warning ..."
fi

        我們來看看結(jié)果

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到已經(jīng)達到 10% 了。

        d> 根據(jù)第三步的結(jié)果決定報警,并將它寫入到 /home/aston/test/warning.txt 文件中,再加上日期信息

#! /bin/bash

df /tmp

ABC=$(expr 5820284 \* 100 / 49410864)

echo $ABC

if [ $ABC -gt 10 ]
then
    echo "$(date) Warning [Disk greater than 10%!!!]" >> /home/aston/test/warning.txt
fi

        我們來看看結(jié)果

shell 之 數(shù)學(xué)計算 &引用(三)

        我們此時已經(jīng)實現(xiàn)報警的功能。

        下來我們來看看 shell 中的引用。那么什么叫引用呢?引用便是對 shell 腳本、程序、終端命令、變量以及字符串等結(jié)果的反饋。引用的類型如下所示

"" 雙引號
`   反引號
''  單引號
\  反斜線

        那么我們?yōu)槭裁匆M行引用呢?引用的目的就是為了防止不必要的誤會。

        舉例:

        ① echo hello world * 與 echo "hello world *"

shell 之 數(shù)學(xué)計算 &引用(三)

        我們的本意是輸出 hello world *,可是在第一種情況下,我們不加 "",便導(dǎo)致了它將 * 命令解讀成輸出全部的文件了。

        ② echo "hello "world "  welcome"

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到第一種與第二種的區(qū)別了,第二種由于雙引號沒加完,因此它執(zhí)行的結(jié)果會和我們想象的不一樣。

        1、雙引號:使用雙引號可引用除字符 $、`、\ 外的任意字符或字符串。

        舉例:echo "%#$^ $hello world"

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到只輸出了 world,并沒有 hello。

        2、單引號:它與雙引號類似,不同的是 shell 會忽略任何引用值。

shell 之 數(shù)學(xué)計算 &引用(三)

        3、反引號:它用于將系統(tǒng)命令的輸出到變量。

        ① echo  `hello`  (錯 ×)

        ② echo `date`    (對 √)

shell 之 數(shù)學(xué)計算 &引用(三)

        4、反斜線:如果下一個字符有特殊含義,反斜線防止 shell 誤解其含義。

        下述字符包含有特殊意義:& * + ^ $ ` " | ?

shell 之 數(shù)學(xué)計算 &引用(三)

        我們看到在 & 后面的時候,它是報錯了。因為 & 表示由退出的含義,因此在它前面加 \ 則會讓 shell 忽略其特殊含義,以防止誤解。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI