Shell脚本:条件语句(if、case)

目录

硬编码

硬编码的缺点

条件判断

$?

命令行语句

判断指定目录是否存在

判断指定文件是否存在

判断指定对象是否存在

表达式形式语句

判断对象是否存在

判断对象是否有权限

与、或、非 运算

与运算

或运算

非运算

比较大小

判断磁盘利用率实验步骤

字符串比较

逻辑表达式

if 语句

单分支结构

语法格式

语句原理

单分支if语句示例操作步骤

双分支结构

语法格式

语句原理

连通性测试实例操作步骤

多分支结构

语法格式

语句原理

多分支if语句示例操作步骤

case语句

语法格式

语句原理

case语句示例操作步骤

模拟sleep服务实例操作步骤

注册为系统服务调用脚本

服务管理方式

systemctl

service


硬编码

硬编码(Hard Coding)是指在程序代码中直接使用固定值,而不是通过变量、配置文件或参数来动态获取这些值

比如在脚本中写入一个ping命令,目标的IP地址固定为192.168.10.101(直接嵌入常量或固定逻辑),这就是硬编码

硬编码的缺点

  1. 难以维护:当需要修改硬编码的值时,需要直接修改源代码,并重新编译、部署应用。这增加了出错的风险和维护成本。
  2. 缺乏灵活性:硬编码使得程序在不同环境中运行时缺乏灵活性。例如,开发环境和生产环境的配置可能不同,如果使用硬编码,就需要为每个环境分别修改代码。
  3. 可读性和可管理性差:随着项目规模的增大,硬编码会导致代码难以阅读和管理,特别是当这些值分散在多个文件和模块中时。

条件判断

$?

检查上一个指令执行的结果状态

echo $?

如果状态正常就返回0

如果状态不正常就显示非0

命令行语句

判断指定目录是否存在

使用 test -d 目录路径 来判断指定目录是否存在

并使用echo $? 命令检测命令执行状态,非0表示不正常

判断指定文件是否存在

test -f 文件路径 判断文件是否存在

判断指定对象是否存在

表达式形式语句

判断对象是否存在

判断对象是否有权限

  • -r:读权限
  • -w:写权限
  • -x:执行权限

与、或、非 运算

逻辑运算符

与运算

当前一个条件成立时,执行命令

示例:[ $USER = root ] && echo "当前用户为root"

解析:当用户为root时,在终端上输出“当前用户为root”

或运算

只要有一方的条件满足,就执行命令

如果两个文件只有file1存在那么结果为真(true),如果两个文件只有file2存在结果为真(true)

如果两个文件都不存在,结果为假(false)

if [ -f "$file1" ] || [ -f "$file2" ]; thenecho "文件存在!"
elseecho "文件不存在!"
fi
非运算

非运算会将 true 变为 false,将 false 变为 true

示例:[ ! -d /opt/test.txt ] && echo "该文件不是目录"

解析:如果指定的文件 不是目录,就在终端显示“该文件不是目录”

配合 = 就是 !=:不等于

示例:[ $USER != root ] && echo "当前用户不为root"

比较大小

运算符

说明

eq

等于(equal)

ne

不等于(not equal)

gt

大于(greater)

ge

大于等于(greater or equal)

lt

小于(less)

le

小于等于(less or equal)

判断磁盘利用率实验步骤

通过 df 命令 并使用 grep 管道符和 awk 获取根分区行内容的利用率的一列

再添加一个管道符 指定%为分隔符 结果只剩下利用率的数字

再将该命令的结果赋值给一个变量,接下来就可以做判断的操作了

通过表达式实现判断,可以看到结果是否,那么我们就可以通过判断的结果使用 if 语句来

字符串比较

使用表达式判断

需要注意的是,语法格式是有要求的

逻辑表达式
  • &&(与运算):条件1 && 条件2
    • 如果条件1执行成功,也执行条件2

if 语句

if:如果

如果判断的条件成立,就执行指定的命令

单分支结构

语法格式

语句原理

单分支if语句示例操作步骤

cd 到 /opt 目录下创建一个脚本文件

文件内容如下

新建一个用户并设置密码,然后登录该用户

使用tom的身份执行此脚本就成立了我们指定的条件(不是root用户),状态码也指定为了100

并且后续的 ls /opt命令没有执行,因为前一条语句没有执行成功

双分支结构

语法格式

语句原理

连通性测试实例操作步骤

新建编辑一个脚本文件

写入内容如下

指定ping命令的请求次数、间隔时间、超时时间,和添加位置参数

/dev/null 是“黑洞文件”,作用是任何写入到该文件的数据都会被丢弃,在当前脚本下的作用是丢弃标准输出和错误的输出信息,效果是不会在终端显示

测试执行该脚本,得到结果如下

如果在巡检时有上百上千台机器需要做连通性测试呢?

就可以编辑一个 主机列表 把所有主机的IP地址写进去,再将该列表引用到脚本里,让脚本通过该列表获取每个IP地址,逐个测试,实现自动化

多分支结构

语法格式

语句原理

多分支if语句示例操作步骤

新建编辑脚本文件,输入以下内容

保存并退出,测试该脚本

case语句

case:情况

语法格式

语句原理

case语句示例操作步骤

新建编辑脚本文件并写入以下内容

或通过 |(或运算),两个范围同时判断

模拟sleep服务实例操作步骤

新建编辑脚本文件输入以下内容

增加执行权限

需要注意的是使用相对路径时,在执行脚本内部的$0命令会找不到test03脚本文件,因为 $0 仅包含脚本名而不包含脚本文件的路径

而使用绝对路径调用时,$0就包含了调用文件时输入的绝对路径,所以在执行脚本内部的$0命令时就能找得到脚本文件了

注册为系统服务调用脚本

修改脚本文件,增加必须的规则(chkconfig)

35:开机自启的运行级别(3、5),也可以写为 "-" 表示所有运行级别

80:启动优先级(当系统启动时,开机自启的优先级,数字越大,优先级越低)

20:关闭优先级(关闭系统时,关闭服务的优先级)

再将文件拷贝到指定位置

在脚本中加入了chkconfig规则就可以通过chkconfig命令将脚本注册为系统服务

注册为系统服务后,就可以通过service命令对该服务进行操作

系统启动时自动运行该服务

服务管理方式

  • systemctl

    • 串行启动
    • 如果系统的守护进程是systemd,管理系统服务的就是 systemctl
      • systemctl start|stop|restart|reload|status|enable|disable httpd
      • systemctl 选项 服务名称
  • service

    • 并行启动
    • 如果系统的守护进程是init,管理系统服务的就是 service 管理(在CentOS 7往后,系统内的init是systemd的链接)
      • service httpd start|stop|restart|reload|status
      • service 服务名称 选项
    • 通过chkconfig 服务名 on 将该服务设为开机自启
    • 需要将脚本文件放置在 /etc/init.d/ 目录下
    • 该脚本需要有执行权(chmod +x)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础之练习(2)

需求: 键盘录入一个字符串,使用程序实现在控制台遍历该字符串 package String;import java.util.Scanner;public class StringDemo5 {public static void main(String[] args) {//录入一个字符串Scanner sc new Scanner(System.in);System.out.println("请输入一个字符串…

1. 基础设计流程(以时钟分频器的设计为例)

1. 准备工作 1. 写有vcs编译命令的run_vcs.csh的shell脚本 2. 装有timescale,设计文件以及仿真文件的flish.f(filelist文件,用于VCS直接读取) vcs -R -full64 -fsdb -f flist.f -l test.log 2. 写代码(重点了解代码…

如何将办公文档压缩成rar格式文件?

压缩包格式是我们生活工作中常用到的文件格式,那么如何得到一个rar格式的压缩文件?或者说如何将文件压缩成rar格式而不是zip格式呢?今天我们来了解一下如何压缩为rar格式文件。 首先,下载并安装WinRAR,然后用鼠标选择需…

【Python】成功解决TypeError: missing 1 required positional argument

【Python】成功解决TypeError: missing 1 required positional argument 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介&#xff1…

React的服务器端渲染(SSR)和客户端渲染(CSR)有什么区别?

React的服务器端渲染(SSR)和客户端渲染(CSR)是两种不同的页面渲染方式,它们各自有不同的特点和适用场景: 服务器端渲染(SSR) 页面渲染: 页面在服务器上生成,然后将完整的…

复盘最近的面试

这个礼拜一直在面试,想着看看能否拿到不错的offer前去实习,从周一到周四,面了将近10家,特整理此份面经,希望对秋招的各位有所帮助 A公司 一面 面试官人很好,我回答的时候不会他会笑笑然后提醒我 自我介绍~…

数据通信与网络(三)

物理层概述: 物理层是网络体系结构中的最低层 它既不是指连接计算机的具体物理设备,也不是指负责信号传输的具体物理介质, 而是指在连接开放系统的物理媒体上为上一层(指数据链路层)提供传送比特流的一个物理连接。 物理层的主要功能——为…

项目中eventbus和rabbitmq配置后,不起作用

如下:配置了baseService层和SupplyDemand层得RabbitMQ和EventBus 但是在执行订阅事件时,发送得消息在base项目中没有执行,后来发现是虚拟机使用得不是一个,即上图中得EventBus下得VirtualHost,修改成一直就可以了

肆拾玖坊三级众筹模式玩法揭秘,白酒体验馆运作模式

发展至今,肆拾玖坊已积累了数百万忠实用户,拥有100多家分销商、5000多个新零售终端,覆盖全国34个省级行政区域、200余地市、1500个县区。成为中国创业界和酒行业的“现象级”企业。 今天,我们就来深入解析肆拾玖坊的营销模式&…

Linux入门攻坚——26、Web Service基础知识与httpd配置-2

http协议 URL:Uniform Resource Locator,统一资源定位符 URL方案:scheme,如http://,https:// 服务器地址:IP:port 资源路径: 示例:http://www.test.com:80/bbs/…

ios18计算器大更新使用指南,一招掌握新计算器使用技巧!

苹果推出iOS 18系统中,变化较大的之一就是以多年没有更新的计算器应用程序,新增了多个使用的功能,经过小编几天的使用,总结了几个iOS 18计算器的使用技巧和更新点分享给大家。 一、界面布局变化 与iOS 17相比,iOS18的…

Java学习笔记(二)变量原理、常用编码、类型转换

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java变量原理、常用编码、类型转换详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 1、变量原理 1.1、变量的介绍 变量是程…

生成式AI时代,数据存储管理与成本如何不失控?

无数据,不AI。 由生成式AI掀起的这一次人工智能浪潮,对企业的产品、服务乃至商业模式都有着颠覆性的影响。因此,在多云、大数据、生成式AI等多元技术的驱动下,数据要素变得愈发重要的同时,企业对于数据存储的需求也在…

【Android14 ShellTransitions】(六)SyncGroup完成

这一节的内容在WMCore中,回想我们的场景,是在Launcher启动某一个App,那么参与动画的就是该App对应Task(OPEN),以及Launcher App对应的Task(TO_BACK)。在确定了动画的参与者后&#x…

JVS开源底座与核心引擎的全方位探索,助力IT智能、高效、便捷的进化

引言 JVS产品的诞生背景 JVS是软开企服构建的一站式数字化的解决方案,产生的背景主要来源于如下几个方面: 企业数字化需求的增长:企业对IT建设的依赖程度越来越高,数字化、指标化的经营已经是很多企业的生存的基础和前提&#…

postman 工具下载安装使用教程_postman安装

本文讲解的是postman工具下载、Postman安装步骤、postman下载、postman安装教程。Postman是一款流行的API测试工具,它提供了一个用户友好的界面,用于发送和测试API请求,并且可以轻松地按需管理和组织请求。 这使得开发人员和测试人员能够更高…

CARIS HIPS and SIPSv12 是专业的多波束水深数据和声呐图像处理软件

CARIS HIPS and SIPS是专业的多波束水深数据和声呐图像处理软件。CARIS HIPS and SIPS适用于海洋应用需求。其可靠性和可用性对多波束水深数据处理和声呐图像都是很重要的。CARIS HIPS用于处理多波束水深数据,CARIS SIPS用于处理侧扫声呐图像和多波束背向散射回波数…

css文字镂空加描边

css文字镂空加描边 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>文字镂空</title><style>/* 公用样式 */html,body{width: 100%;height: 100%;position: relative;}/* html{overflow-y: scroll;} */*{margi…

【扫雷游戏】C语言实现

机器学习&#xff1a;Transformer框架理论详解和代码实现>Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属…

Ubuntu系统下修改网卡IP地址

Ubuntu系统下修改网卡IP地址 一、Ubuntu系统介绍1.1 Ubuntu简介1.2 Ubuntu网络配置方式 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、配置网卡IP地址4.1 备份网卡配置文件4.2 查看当前IP地址4.3 修改…