Shell编程之条件语句

条件测试

文件测试与整数测试

字符串测试与逻辑测试

if语句

if单分支语句

if双分支语句

if多分支语句

case分支语句

条件测试操作

条件测试操作 1

条件判断

test命令测试表达式是否成立,若成立返回0.否则返回其它数值。

格式 1 test  条件表达式

格式 2 [ 条件表达式 ]                     #中括号两边要留有空格

条件测试操作 2

文件测试

格式:[ 操作符 文件或目录 ]

在opt目录下面我们创建了一个文件和一个目录,用常用的操作符号来测试一下文件或者目录是否存在,如果存在,echo $?就会回复0,如果不存在就会回复非0值,分别对文件/目录,单对文件,但对目录进行文件测试。

我们查看目录的属性,并且测试用户有没有读写执行的权限,我们可以看到root用户是有这三个权限的,但当我们su到张三用户时,张三用户就没有写的权限了,这在一开始我们就可以看到张三用户是属于其它用户,而其它用户是没有写的权限,因此张三用户不能进行目录的写入。

这时我们创建一个软连接文件

使用文件测试,这时显示软连接是存在的。

常用的操作符:
-e:测试目录或文件是否存在(Exist)。
-d:测试是否为目录(Directory)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
-L:测试是否为符号链接

条件测试操作 3

整数测试

整数值比较
格式:[ 整数变量1 操作符 整数变量2 ]

用常用的操作符就可以进行整数的测试,两个数值进行比大小,根据echo的反馈进行判断。

如果进行数字的加减运算表达式,加上两个括号就可以进行测试。

常用的操作符:
-eq:等于                        ==
-ne:不等于                    !=
-gt:大于                         \>
-lt:小于                          \<
-le:小于等于
-ge:大于等于

条件测试操作 4

字符串测试

格式1:
test "字符串1" == "字符串2"      [ "字符串1" == "字符串2" ]    [[ "字符串1" == "字符串2" ]]       #判断字符串是否相同
test "字符串1" != "字符串2"      [ "字符串1" != "字符串2" ]    [[ "字符串1" != "字符串2" ]]       #判断字符串是否不同

[[ "字符串1" =~ "字符串2 ]]                                              #判断字符串1是否包含字符串2

格式2:

test -z "字符串"      test -z "$变量"   [ -z "$变量" ]     #判断字符串或变量是否为空
test -n "字符串"      test -n "$变量"   [ -n "$变量" ]     #判断字符串或变量是否有字符串

我们只给a进行赋值,然后用-z和-n对a和b进行查看,发现echo的反馈符合条件。

加上双引号才不会出问题。

条件测试操作 5

逻辑测试

[ 表达式1 ] && [ 表达式2 ]   [ 表达式1 -a 表达式2 ]    [[ 表达式1 && 表达式2 ]]      

且,要求前后表达式条件都成立

[ 表达式1 ] || [ 表达式2 ]   [ 表达式1 -o 表达式2 ]    [[ 表达式1 || 表达式2 ]]      

或,只需前后表达式条件成立一个即可

[ 表达式1 ] || 命令1              

#如果表达式1条件成立不会执行或运算符后面的命令1,如果表达式1条件不成立则会执行或运算符后面的命令1

[ 表达式1 ] && 命令1 || 命令2    

#如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令2

常用的操作符
-a或&& :逻辑与,“而且”的意思,前后条件需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否

[ ! 表达式1 ]       #取反,如果表达式1条件成立则最终结果为条件不成立

感叹号起到起反的作用。

拓展

ping自己的ip地址四次,一次间隔0.5秒,一共需要两秒 加上IP地址,导入黑洞文件不需要回复

查看上一条命令执行情况反馈,显示执行正常。

如果ping成功则输出true,失败则输出wrong。

拓展2

一条命令实现httpd服务运行,如果没有运行则自动运行。

ss查看80号端口是否开启,如果没有则启动服务。查看服务是否开启。

查看端口是否开启,结果导入黑洞文件,如果开启输出httpd is start ,否则启动服务。

创建一个httpd脚本文件

数字等于查看端口号后过滤http 再次反向过滤grep 再次不使用标题 再次统计数字

如果数字大于0 则输出http is starting 否则启动服务。

判断进程是否正在运行的方法

systemctl status 进程服务
netstat -lntup | grep :端口/进程名
ss -lntup | grep :端口/进程名
lsof -i :端口
ps -elf | grep 进程名 | grep -v "grep" | grep -v "$$" | wc -l
pidof 进程名 | wc -w
killall -0 进程名

if语句的结构

单分支结构

实现对根目录磁盘使用情况的监控

创建一个脚本文件demo1.sh

单分支
if [ 条件表达式 ]      if test 条件表达式      if 命令行 &> /dev/null
then
  命令序列
  ...
fi  

if [ 条件表达式 ];then
  命令序列
  ...
fi 

等效于
[ 条件表达式 ] && 命令

双分支结构

实验  查看端口是否监听,是则输出服务正在运行,否则开启服务。

创建脚本文件,创建好后赋权限

查看端口号是否开启,结果输出到黑洞文件

if  条件表达式  上条命令的返回码是否为0

如果是0然后

输出服务已经开启到屏幕

如果不是

输出网站正在开启到屏幕

然后启动http服务

fi 结尾。

关闭服务并且查看服务开启状态

启动脚本文件,屏幕出现网站正在开启,查看服务是否开启,显示开启

再次执行脚本,屏幕显示服务已经开启。

双分支
if [ 条件表达式 ]
then
  命令序列
else
  命令序列
fi 

等效于
[ 条件表达式 ] && 命令1 || 命令2
 

多分支结构

实验  实现成绩的应答判断

先创建脚本文件之后赋权限执行脚本输入分数得到回应。

read定义一个变量

if 变量等于100然后

输出太厉害了到屏幕

slif继续设置大于等于90,小于100.然后

输出罚抄错题1十遍到屏幕

slif继续设置大于等于70,小于89然后

输出错题罚抄二十遍到屏幕

else收尾

输出错题罚抄三十遍到屏幕

fi  结尾。

多分支
if [ 条件表达式 ];then
  命令序列
elif [ 条件表达式 ];then
  命令序列
elif [ 条件表达式 ];then
  命令序列
....
else
  命令序列
fi 

拓展实验

实现分别数字的奇偶

case语句

原理图

实验 

实现成绩的分配


case多分支语句的语法:
case $变量 in
模式1)
  命令序列
  ;;
模式2)
  命令序列
  ;;
....
*)
  命令序列
esac

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

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

相关文章

【Redis7】了解Redis

1.常见数据库 1.1.键值存储数据库 如 Map 一样的key-value 对&#xff0c;典型代表就是 Redis。 1.2.列存储数据库 关系型数据库是典型的行存储数据库&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。而按列存储则可实现分布式存储&…

猫不爱喝水是正常的?求求別再被洗脑了!日常可以补水的主食分享

猫不爱喝水正常吗&#xff1f;看给猫喂的什么&#xff0c;喂的罐头的话不爱喝水问题不大。喂的干粮猫还长期不喝水&#xff0c;处于缺水状态&#xff0c;可能会出现便秘、上火、尿黄、尿少等症状。在高温的夏季&#xff0c;猫还可能因脱水而中暑&#xff0c;严重时甚至可能导致…

用c++实现汉诺塔问题、归并排序

6.1.3 汉诺塔问题 【问题】 汉诺塔问题(Hanio tower problem)来自一个古老的传说&#xff1a;有一座宝塔&#xff08;塔A),其上有64个金碟&#xff0c;所有碟子按从大到小由塔底堆放至塔顶。紧挨着这座宝塔有另外两座宝塔&#xff08;塔B和塔C),要求把塔A上的碟子移动到塔C上…

01-xss基本原理

核心:攻击的是前端&#xff0c; 一、课程引入 1、开发一个简单的PHP页面&#xff0c;代码如下&#xff1a; <?php // xss 基础演示代码&#xff1a;从浏览器中接受一个URL地址参数名为content if(isset($_GET[content])){$content$_GET[content];echo "你输入的内容…

再议大模型微调之Zero策略

1. 引言 尽管关于使用Deepspeed的Zero策略的博客已经满天飞了&#xff0c;特别是有许多经典的结论都已经阐述了&#xff0c;今天仍然被问到说&#xff0c;如果我只有4块40G的A100&#xff0c;能否进行全量的7B的大模型微调呢&#xff1f; 正所谓“纸上得来终觉浅&#xff0c;…

进程状态与优先级

Linux内核源代码&#xff1a; 首先我们需要明确一点&#xff0c;Linux操作系统和操作系统的进程状态是不同的 上图大概标识了各个状态对应在操作系统的状态 普通进程 R运行状态&#xff08;running&#xff09;: 并不意味着进程一定在运行中&#xff0c;它表明进程要么是在…

ROS 2边学边练(44)-- 从头开始构建一个视觉机器人模型

前言 从此篇开始我们就开始接触URDF(Unified Robot Description Format&#xff0c;统一机器人描述格式)&#xff0c;并利用其语法格式搭建我们自己的机器人模型。 动动手 开始之前我们需要确认是否安装joint_state_publisher功能包&#xff0c;如果有安装过二进制版本的urdf_…

解密某游戏的数据加密

前言 最近有个兄弟通过我的视频号加我&#xff0c;咨询能否将这个dubo游戏游戏开始前就将数据拿到从而进行押注&#xff0c;于是通过抓包工具测试了下&#xff0c;发现数据有时候是明文&#xff0c;有时候确实密文&#xff0c;大致看了下有这几种加密&#xff1a;Md5aes、Md5&a…

网络层协议之 IP 协议

IP 协议格式 4 位版本&#xff1a;此处的取值只有两个&#xff0c;4&#xff08;IPv4&#xff09;和 6&#xff08;IPv6&#xff09;&#xff0c;即指定 IP 协议的版本。 4 位首部长度&#xff1a;描述了 IP 报头多长&#xff0c;IP 报头是变长的&#xff0c;因为报头中的选项部…

点餐小程序 点餐系统 微信点餐系统 支持微信小程序 支付公众号 可接入第三方配送 全开源uniapp

餐饮连锁v2版-体验后台&#xff08;复制粘贴以下地址到浏览器&#xff0c;打开网址即可登录&#xff0c;) 本文来自&#xff1a;点餐小程序 点餐系统 微信点餐系统 支持微信小程序 支付公众号 可接入第三方配送 全开源uniapp - 源码1688 演示后台&#xff1a;https://diancan.…

异构图神经网络——Heterogeneous Graph Neural Networks

相关代码见文末 1.回顾同构图 1.1 GNN GNN基本计算方法——邻接矩阵乘以节点,聚合相邻节点的特征,得到本节点的特征表达 1.2 Graph Attention Network 引入图注意力,实现边的权重可学习,最简单的方法是,将两个节点的特征进行拼接,使用一组可学习的权重参数映射为边的权…

华为数据之道第一部分导读

目录 导读 第一部分 序 第1章 数据驱动的企业数字化转型 非数字原生企业的数字化转型挑战 业态特征&#xff1a;产业链条长、多业态并存 运营环境&#xff1a;数据交互和共享风险高 IT建设过程&#xff1a;数据复杂、历史包袱重 数据质量&#xff1a;数据可信和一致化…

学习大数据,所需更要的shell基础(2)

文章目录 read读取控制台输入函数系统函数bashnamedirname 自定义函数Shell工具&#xff08;重点&#xff09;cutawk 正则表达式入门常规匹配常用特殊字符 read读取控制台输入 1&#xff09;基本语法 read (选项) (参数) ①选项&#xff1a; -p&#xff1a;指定读取值时的提示…

C++初识多态(1)

1.多态要解决的问题&#xff08;引入&#xff09; 任何一种机制的存在&#xff0c;必然是有其存在的意义的&#xff0c;例如我们前面学过的函数重载&#xff0c;运算符重载&#xff0c;以及引用等等&#xff0c;都是解决一些特殊问题的&#xff1b; 下面通过一些具体的例子&a…

组合模式(Composite)——结构型模式

组合模式(Composite)——结构型模式 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能通过通用接口像独立整体对象一样使用它们。如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 例如一个场景…

剁手党必看——转转红包使用规则与最优组合计算全解析

​ 1、省钱攻略基础之“了解平台红包使用规则” 2、举个栗子 3、最优红包组合计算方法进化过程 3.1、初代“笛卡尔乘积”版 3.2、二代“边算边比较Map聚合”版 3.3、三代“边算边比较数组索引定位”版 4、总结 1、省钱攻略基础之“了解平台红包使用规则” 规则一&#x…

介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法

ffmpeg.dll 是一个动态链接库文件&#xff0c;属于 FFmpeg运行库。它在计算机上扮演着非常重要的角色&#xff0c;因为它提供了许多应用程序和操作系统所需的功能和组件。当 ffmpeg.dll 文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行&#xff0c;甚至系统崩溃。下面…

紫外激光打标机适合在哪些材料表面进行标记

紫外激光打标机适合在多种材料表面进行标记&#xff0c;特别是那些对热敏感或者需要高精度、高清晰度标记的材料。以下是一些常见的适用材料&#xff1a; 1. 塑料&#xff1a;紫外激光打标机在塑料材料上表现尤为出色&#xff0c;因为紫外激光的短波长和高能量密度使得它能够在…

Python | Leetcode Python题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; class Solution:def climbStairs(self, n: int) -> int:a, b 1, 1for _ in range(n - 1):a, b b, a breturn b

C语言(操作符)2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…