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,一经查实,立即删除!

相关文章

Spring Data JPA介绍与CRUD实战演练

文章目录 一、Spring Data JPA 简介二、Spring Data JPA 与 MyBatis Plus 比较设计哲学和抽象层次SQL 控制学习曲线和技术要求性能与优化综合考虑 三、SpringDataJpa实战演练1. 创建user表2. 搭建Spring Boot开发环境3. pom.xml文件内容4. application.yml文件内容5. Applicati…

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. 写代码(重点了解代码…

2024年最新消防设施操作员(高级)题库

46.手提式干粉灭火器1~2kg近似有效喷射时间为( )s。 A.10 B.15 C.18 D.20 答案:A 解析:根据初级教材191页,手提式干粉灭火器1~2kg近似有效喷射时间为10s。 47.手提式干粉灭火器8kg近似有效喷射时间为( )s。 A.…

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

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

【第23章】Vue实战篇之文章

文章目录 前言一、搭建界面二、加载文章列表1.界面2.请求脚本3. 加载事件4. 搜索和重置5. 分页事件 三、添加文章1. 富文本编辑器1.1 安装1.2 导入组件1.3 使用1.4 样式美化 2. 页面搭建2.1 数据绑定2.2 界面 3. 图片上传3.1 数据绑定3.2 界面 4. 表单校验4.1 脚本4.2 表单 5. …

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

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

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

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

MySQL集合运算联结

集合的运算 & 联结(内连接,左连接等等) 假如我们有两张表,第一个表名为 students,如下所示: ------------------------------- | student_id | name | class_id | ------------------------------…

Redis晋级之路!!

本节pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

HTML下雪/烟花

文章目录 一、雪花二、烟花 一、雪花 <div id"snow"></div>body {margin: 0;background: #333; } body #snow {height: 100vh;overflow: hidden;position: relative;/*** Defaults**/--size: 1;--fallDuration: 10s;--swayDuration: 0.8s;--fallSlideSt…

复盘最近的面试

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

数据通信与网络(三)

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

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

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

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

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

【FFmpeg】AVIOContext结构体

【FFmpeg】AVIOContext结构体 1.AVIOContext结构体的定义 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVIOContext 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调用ffmpeg库进行RTMP推流和拉流 【FFmpeg】调用…

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

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

使用cv2对视频指定区域进行去噪

视频去噪其实和图象一样&#xff0c;只是需要现将视频截成图片&#xff0c;在对图片进行去噪&#xff0c;将去噪的图片在合成视频就行。可以利用cv2.imread()、imwrite()等轻松实现。 去噪步骤 1、视频逐帧读成图片 2、图片指定区域批量去噪 2、去噪后的图片写入视频 1、视频逐…

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

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

写一个chrome插件,统一修改所有http请求的header头,包括ajax请求

要创建一个可以灵活修改HTTP请求头的Chrome扩展&#xff0c;包括一个用户界面来动态设置头部名称和值&#xff0c;可以按照以下步骤进行。我们会用到 chrome.storage API 来保存用户的设置&#xff0c;并在后台脚本中使用这些设置来修改请求头。 文件结构 my_chrome_extensio…