shell之数学计算&引用(三)-创新互联

    今天我们来看看 shell 中的数学计算和引用。在 shell 中的计算方法有三种:1、expr;2、();3、let。下来我们来仔细的看看这三种数学计算:

丹寨ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

        1、第一种:expr

            格式:expr 操作数1 操作符 操作数2

            举例:

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

shell 之 数学计算 &引用(三)

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

shell 之 数学计算 &引用(三)

       由此我们可以看出在 expr 的数学计算中,它是不支持浮点数的计算的,另外在赋值变量的时候还有一种写法。


            ③ expr 1 + 2 * 3(?)

shell 之 数学计算 &引用(三)

        我们看到在第一次执行的时候报语法错误,这是因为在 bash 脚本中,* 被赋予0到任意一个字符,我们当做乘法运算时,必须得加上转义符(\)才能进行正确的乘法计算。

        那么由此可以看出第一种数学计算的格式要求相对严格一点。

        2、第二种:()

            格式:$((操作数1 操作符 操作数2))

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

shell 之 数学计算 &引用(三)

        我们可以看出第二种数学计算的格式相对来说要求较松。

        3、第三种:let

            格式:let "[变量][操作符] 操作数1 操作符 操作数2"

            举例:

            ① let "3+4"

            ② let "TMP=3+4"

shell 之 数学计算 &引用(三)

        我们看到第三种数学计算的格式要求松,而且计算灵活

        那么我们学习 shell 中的数学计算有什么实际用途呢?下来我们就来看一个例子,一个简单的脚本:

        当 /tmp 目录下文件占用率达到 80% 时,对磁盘文件进行特定的清理,当达到设定值时对管理员发一封邮件报警。

        实现步骤:

        a> 使用 df 命令对 /tmp 目录进行查看

shell 之 数学计算 &引用(三)

        b> 对磁盘占用率进行计算

shell 之 数学计算 &引用(三)

        我们之前说过它是不支持浮点数计算的,因此我们先 *100 再进行相除操作。我们看到在进行除法操作之后它的占用率不等于 13%,这是因为它还有一部分空间是给 root 用户使用的。

        c> 判断是否达到特定值,我们把之前的写成一个脚本

#! /bin/bash

df /tmp

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

echo $ABC

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

        我们来看看结果

shell 之 数学计算 &引用(三)

        我们看到已经达到 10% 了。

        d> 根据第三步的结果决定报警,并将它写入到 /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

       我们来看看结果

shell 之 数学计算 &引用(三)

        我们此时已经实现报警的功能。

        下来我们来看看 shell 中的引用。那么什么叫引用呢?引用便是对 shell 脚本、程序、终端命令、变量以及字符串等结果的反馈。引用的类型如下所示

"" 双引号
`  反引号
'' 单引号
\ 反斜线

       那么我们为什么要进行引用呢?引用的目的就是为了防止不必要的误会

        举例:

        ① echo hello world * 与 echo "hello world *"

shell 之 数学计算 &引用(三)

        我们的本意是输出 hello world *,可是在第一种情况下,我们不加 "",便导致了它将 * 命令解读成输出全部的文件了。

        ② echo "hello "world " welcome"

shell 之 数学计算 &引用(三)

        我们看到第一种与第二种的区别了,第二种由于双引号没加完,因此它执行的结果会和我们想象的不一样。

       1、双引号:使用双引号可引用除字符 $、`、\ 外的任意字符或字符串

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

shell 之 数学计算 &引用(三)

        我们看到只输出了 world,并没有 hello。

        2、单引号:它与双引号类似,不同的是 shell 会忽略任何引用值。

shell 之 数学计算 &引用(三)

        3、反引号:它用于将系统命令的输出到变量。

        ① echo `hello` (错 ×)

        ② echo `date`   (对 √)

shell 之 数学计算 &引用(三)

        4、反斜线:如果下一个字符有特殊含义,反斜线防止 shell 误解其含义。

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

shell 之 数学计算 &引用(三)

        我们看到在 & 后面的时候,它是报错了。因为 & 表示由退出的含义,因此在它前面加 \ 则会让 shell 忽略其特殊含义,以防止误解。


另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:shell之数学计算&引用(三)-创新互联
网页链接:http://myzitong.com/article/dojpdj.html