shell脚本-条件测试、

news2024/12/23 2:17:08

一.条件测试

1.( ) 和  { }

()会进/data ,开启子shell

{ } 直接切过去了,不开子shell

小案例:

2. test 命令

测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值

格式:

test  条件表达式

[  条件表达式  ]   (注意至少应有一个空格)

文件测试常见选项

常见操作符含义
-e测试目录或文件是否存在
-d测试是否为目录
-a测试目录或文件是否存在(不推荐)
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行
-L测试是否为软连接文件
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件
-s是否存在且非空
-t  fdfd 文件描述符是否在某终端已经打开
-N文件自从上一次被读取之后是否被修改过
-O当前有效用户是否为文件属主
-G当前有效用户是否为文件属组

-a 和 -e 推荐使用-e

权限比较特殊,如果我是超级管理员,即使看不到这些权限,我也可以读、写等,以实际为准。

x 执行权限比较特殊

3. 比较整数数值

格式:

[  整数1  操作符   整数2  ]

常见测试操作符:

-eq第一个数等于(Equal)第二个数
-ne第一个数不等于(Not Equal)第二个数
-gt第一个数大于(Greater Than)第二个数
-lt第一个数小于(Lesser Than)第二个数
-le第一个数小于或等于(Lesser or Equal)第二个数
-ge第一个数大于或等于(Greater or Equal)第二个数

测试磁盘空间是否大于等于80

4. 字符串比较

格式:

[  字符串1 =  字符串2 ]  是否相同

[  字符串1  !=  字符串2  ]  是否不相同

[  -z  字符串  ]   是否为空

[  -n  字符串  ]  字符是否存在

常见的测试符比较

=字符串内容相同
!=字符串内容不同,! 号表示相反的意思
-z字符串内容为空
-n字符是否存在

5.逻辑测试

格式:

[  表达式1  ]  操作符   [  表达式2  ]

命令1  操作符  命令2

操作符:

&&或 -a 逻辑与   而且的意思
||  或  -o 逻辑或   或者的意思
!逻辑否
 cmd1 && cmd2 || cmd3  

## 如果cmd1成功,执行cmd2,如果cmd2不成功,就执行cmd3

① 使用邮箱发送磁盘过高警告

1.邮箱设置

2.开启pop3 smtp服务(此处会生成一个授权码,这个授权码先保存,后续需要,如果没保存,可以点击下面的生成授权码,发送短信即可生成授权码)

3.修改配置文件

  • 邮箱的配置文件为:/etc/mail.rc

4.请求数字认证

mkdir -p /root/.certs/

echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

cd  /root/.certs/

certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt

certutil -L -d /root/.certs

5.测试

6.写入脚本

#!/bin/bash
#实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送到自己的QQ邮箱 
systemctl stop firewalld    #关闭防火墙
yum -y install mailx &>/dev/null  #下载邮件安装包

#第一次需要填加,后面不需要
#cat >> /etc/mail.rc <<EOF
#set from=2860596835@qq.com  
#set smtp=smtps://smtp.qq.com:465
#set smtp-auth-user=2860596835@qq.com
#set smtp-auth-password=pbluakdnbqdvddfe
#set ssl-verify=ignore
#set smtp-auth=login
#set nss-config-dir=/root/.certs
#EOF

#下面开始进行数字认证
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
cd  /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt
certutil -L -d /root/.certs


use=`df|tr -s " "|grep sda|cut -d " " -f5|tr -d %`


[ $use -ge 80 ] && echo "磁盘剩余空间不足"|mail -s warning 2860596835@qq.com ||echo "磁盘剩余量足够"

② 左轮手枪

③ 操作

6. 双中括号

[[  ]]

==    左侧字符串是否和右侧的PATTERN相同
 注意:此表达式用于[[ ]]中,PATTERN为通配符
=~    左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
 注意: 此表达式用于[[  ]]中,扩展的正则表达式

操作:

二. if 语句

1.单分支结构


格式:
if [ 条件判断式 ]; then
	当条件判断成立时,执行一条或多条命令
fi 	

或者

if [ 条件判断式 ]
then
执行的命令
fi

2.双分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当条件判断不成立时,可以执行一条或多条命令
fi 	

3.多分支结构


if   [ 条件判断式一 ]; then
	当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
	当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式三 ]; then
	当条件判断成立时,可以执行一条或多条命令
......
else	
	当上面的条件判断都不成立时,可以执行一条或多条命令
fi 	

4.操作

① 看服务是否开启

② 判断操作系统

③ 判断成绩

④ 剪刀石头布

⑤ 鸡兔同笼

三. case 语句

1.语法


格式:
case 变量名称 in
模式1)
	命令序列
    ;;
模式2)
	程序段
	;;
*)
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	默认程序段
	;;
esac

格式注意:

  • case 行首必须以单词“in”,每一模式必须以单个右括号")"结束

  • 双分号 ";;" 表示命令序列的结束

  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠 | 表示或,比如 a|b

  • 最后的)表示默认模式,其中的 * 相当于通配符

2.操作

① 判断字母还是数字还是特殊字符

② 剪刀石头布

③ 判断输入yes和no

④ 判断成绩

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

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

相关文章

[BUG] Authentication Error

前言 给服务器安装了一个todesk&#xff0c;但是远程一直就是&#xff0c;点击用户&#xff0c;进入输入密码界面&#xff0c;还没等输入就自动返回了 解决 服务器是无桌面版本&#xff0c;或者桌面程序死掉了&#xff0c;重新安装就好 sudo apt install xorg sudo apt inst…

PIL笔记:通道+模式+坐标系统+基本图像操作

PIL Python Imaging Library&#xff0c;Python的图像处理核心库 通道bands 灰度图片是单通道组成 彩色图片是三通道RGB组成 真彩色图片是四通道RGBA组成 模式 RGB RGBA … 坐标系统 左上角为原点(0, 0) 图像操作 显示图像 show 创建图像 open()打开图像new()创建I…

嵌入式学习-C++-Day1

嵌入式学习-CDay1 一、思维导图 二、作业 1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream> #include <string.h>using namespace…

shopee母婴选品:Shopee平台上进行母婴类目的选品

在Shopee平台上进行母婴类目的选品时&#xff0c;卖家可以通过一些策略来提高产品的市场竞争力和销售业绩。下面将详细介绍这些策略。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#xff09;&#xff1a;D。dDqbt。Com/JU5o知虾是Sh…

考研C语言刷题基础篇之分支循环结构基础(二)

目录 第一题分数求和 第二题&#xff1a;求10 个整数中最大值 第三题&#xff1a;在屏幕上输出9*9乘法口诀表 第四题&#xff1a;写一个代码&#xff1a;打印100~200之间的素数 第五题&#xff1a;求斐波那契数的第N个数 斐波那契数的概念&#xff1a;前两个数相加等于第三…

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0…

git clone报错 fatal: unable to fork

1. 问题 git clone gitgithub.com:url-kaist/Quatro.git Cloning into Quatro... fatal: unable to fork 在使用Docker clone 代码时报错 2. 解决方法 查看是否安装openssh&#xff0c; 用以下命令查看系统是否已安装OpenSSH&#xff0c;如果有openssh-client和openssh-serve…

Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定制开发等…

php基础学习之变量

php使用变量的必要性 PHP 是一种动态网站开发的脚本语言&#xff0c;动态语言特点是交互性&#xff0c;会有数据的传递&#xff0c;而 PHP作为“中间人”&#xff0c;需要进行数据的传递&#xff0c;传递的前提就是 PHP 能自己存储数据(临时存储) php变量的命名规则 必须以do…

邯郸银行2023年营收、利润双降:四季度亏损超1亿元,承压明显

近日&#xff0c;邯郸银行发布《2024年度同业存单发行计划》&#xff0c;披露了2023年部分财务数据。信息显示&#xff0c;邯郸银行2023年实现营业收入34.03亿元&#xff0c;同比下降0.98%&#xff1b;净利润6.21亿元&#xff0c;同比下降58.51%。 而结合此前的财务数据测算可知…

grid布局,flex布局实现类似响应式布局的效果

一. grid布局 实现代码 <!DOCTYPE html> <html lang"en"><head><style>.box {display: grid;grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); /*自动填充&#xff0c;最小宽度300px*/justify-content: space-between;gap:…

CC工具箱使用指南:【平差工具】

一、简介 平差是一个摘自英文单词“adiustment”的中文翻译&#xff0c;它最初源于土地测量工程&#xff0c;并在后来广泛应用于各个测量领域在传统的测量中&#xff0c;由于各种误差的存在&#xff0c;例如仪器、人为、大地形态等因素&#xff0c;所得到的测量结果是不完全准…

Android开发之部署opencv4

1 新建一个空项目 不再多说 2从官网下载opencv https://opencv.org/releases/ 下载opencv-4.9.0-android-sdk 3 导入模块 点击file->new->Import Module选择解压之后的opencv-android-sdk文件夹中的SDk文件夹&#xff0c;并将:sdk修改为:opencv&#xff08;我的已安…

MySQL 初识MySQL

目录 1 数据库1.1 前言1.2 数据库分类1.2.1 关系型数据库&#xff08;RDBMS&#xff09;1.2.2 非关系型数据库1.2.3 关系型数据库与非关系型数据库的区别 2 链接数据库3 SQL分类4 存储引擎 1 数据库 1.1 前言 到底什么是MySQL? 大家都知道MySQL叫做数据库。那么什么是数据库…

设置 SSH 主机 xxx: (details) 连接到 VS Code Server - 重试 6

问题背景 在vscode上ssh连接到某台服务器的时候一直显示重试&#xff0c;但在本地终端里却可以正常ssh。 解决方案 按 Ctrl Shift P 打开命令面板。输入 Remote-SSH: Kill VS Code Server on Host…。选择出现问题的服务器即可。 猜测是本地的vscode与远程服务器的 ~/.vsc…

SpringBoot责任链与自定义注解:优雅解耦复杂业务

引言 责任链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理者链进行传递&#xff0c;直到有一个处理者处理请求。在实际应用中&#xff0c;责任链模式常用于解耦发送者和接收者&#xff0c;使得请求可以按照一定的规则被多个处理者依次处理。 首先&#xff0c;本…

编译和链接---C语言

引言 众所周知&#xff0c;C语言是一门高级的编程语言&#xff0c;是无法被计算机直接读懂的&#xff0c;C语言也不同于汇编PHP&#xff0c;无法直接翻译成机器语言&#xff0c;在学习的过程中&#xff0c;你是否好奇过我们所敲的C语言代码&#xff0c;是如何一步步翻译成机器…

量化交易学习1

一、股票数据基本分类 可分为&#xff08;1&#xff09;技术面数据和&#xff08;2&#xff09;基本面数据 &#xff08;1&#xff09;技术面数据 技术面数据是通过股票的历史价格和交易量等市场数据进行计算和分析得出的指标。常用的技术指标包括移动平均线、相对强弱指标、…

如何自己制作一个属于自己的小程序?

在这个数字化时代&#xff0c;小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷&#xff0c;无需下载安装&#xff0c;扫一扫就能使用。如果你想拥有一个属于自己的小程序&#xff0c;不论是为了个人兴趣&#xff0c;还是商业用途&#xff0c;都可以通过编程或者使用…

Linux的奇妙冒险———vim的用法和本地配置

vim的用法和本地配置 一.vim的组成和功能。1.什么是vim2.vim的多种模式 二.文本编辑&#xff08;普通模式&#xff09;的快捷使用1.快速复制&#xff0c;粘贴&#xff0c;剪切。2.撤销&#xff0c;返回上一步操作3.光标的控制4.文本快捷变换5.批量化操作和注释 三.底行模式四.v…