热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell脚本中的数学运算与变量引用(第三部分)

在本文中,我们将深入探讨Shell脚本中的数学运算和变量引用。Shell提供了多种方法来进行数学计算,主要包括`expr`、`$(())`和`let`。我们将详细解析这三种方法的具体应用和特点,帮助读者更好地理解和使用这些工具。

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

        1、第一种:expr

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

            举例:

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

图片.png

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

图片.png

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

            ③ expr 1 + 2 * 3(?)

图片.png

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

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

        2、第二种:()

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

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

图片.png

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

        3、第三种:let

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

            举例:

            ① let "3+4"

            ② let "TMP=3+4"

图片.png

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

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

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

        实现步骤:

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

图片.png

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

图片.png

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

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

#! /bin/bash
df /tmp
ABC=$(expr 5820284 \* 100 / 49410864)
echo $ABC
if [ $ABC -gt 10 ]
then
    echo "Warning ..."
fi

        我们来看看结果

图片.png

        我们看到已经达到 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

        我们来看看结果

图片.png

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

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

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

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

        举例:

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

图片.png

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

        ② echo "hello "world "  welcome"

图片.png

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

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

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

图片.png

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

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

图片.png

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

        ① echo  `hello`  (错 ×)

        ② echo `date`    (对 √)

图片.png

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

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

图片.png

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


推荐阅读
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • linux用通配符排除指定字符结尾文件的一种方法,Go语言社区,Golang程序员人脉社 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 系统管理员可以通过多种方法实时监控Linux系统中的用户活动,包括当前已登录的用户及其正在进行的操作。利用特定的命令和工具,管理员可以轻松获取这些信息,确保系统的安全性和稳定性。例如,使用`who`、`w`或`last`等命令可以快速查看当前登录的用户及其活动详情。 ... [详细]
  • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
    如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • Docker网络基础探讨了如何通过高效的技术手段实现跨主机容器间的顺畅通信与访问。本文深入分析了Docker网络架构,特别是其在多主机环境下的应用,为Go语言开发者提供了宝贵的实践指导和理论支持。 ... [详细]
  • 本文详细介绍了 Ansible Ad-Hoc 命令的使用方法,基于官方文档进行了中文翻译。Ad-Hoc 命令允许用户通过 `usr/bin/ansible` 快速执行一次性任务,适用于快速部署、配置管理和故障排查等场景。文中通过多个实例演示了 Ad-Hoc 命令的具体应用,帮助读者更好地理解和掌握这一强大工具。 ... [详细]
  • 在 Go 开发环境中,通过使用 iTerm 和 Oh My Zsh,可以显著提升终端操作的效率和体验。Oh My Zsh 是一个强大的 Zsh 配置管理框架,提供了丰富的插件支持,如代码高亮、自动补全和多种编程语言支持,同时还拥有众多美观的主题,使终端界面更加个性化和高效。Zsh 作为一种高度可定制的 shell,不仅适用于交互式应用,还可用作脚本解释器,集成了 bash、ksh 和 tcsh 等其他 shell 的诸多优点,并具备独特的功能特性。 ... [详细]
  • 在 Red Hat 系统的启动过程中,首先运行的程序是 `/sbin/init`。该程序会读取 `/etc/inittab` 文件,并根据其中的配置进行系统的初始化工作。例如,它会根据设定的运行级别启动相应的服务和进程,确保系统能够顺利进入指定的运行状态。此外,`/sbin/init` 还负责管理系统关机和重启等操作,确保系统的稳定性和安全性。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • 深入解析:Android开发进阶之Vim编辑器基础操作与应用
    本文深入探讨了Android开发中使用Vim编辑器的基础操作与应用。通过详细解析Vim的基本命令、配置文件和常用插件,帮助开发者提高代码编写效率。文章还介绍了如何在Android开发环境中高效利用Vim,包括集成开发环境(IDE)的配置和常见问题的解决方法。适合初学者和有经验的开发者参考。 ... [详细]
author-avatar
up61
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有