shell脚本中条件语句

一.test测试

在Shell脚本中,test命令用于进行条件测试。它也可以通过方括号[]来表示,因为test实际上是[命令的一个别名。

格式1:test  条件表达式
格式2:[  条件表达式  ]
注意[ ]空格,否则会失败
测试 是否成功使用 $?  返回值
[ 操作符 文件或目录 ]
help test

示例:

测试是否执行成功0为成功,其余为不成功

以下是一些常见的test条件测试知识点:

1.数值比较

1.-eq:等于 ,第一个数等于(Equal)第二个数

2.-ne:不等于,第一个数不等于(Not Equal)第二个数

3.-gt:大于,第一个数大于(Greater Than)第二个数

4.-lt:小于,第一个数小于(Lesser Than)第二个数

5.-ge:大于等于,第一个数小于或等于(Lesser or Equal)第二个数

6.-le:小于等于,第一个数大于或等于(Greater or Equal)第二个数

++      自身变量+1   
 --       自身变量-1    
+=5    自身变量+5   
-=5     自身变量-5
*=5     自身变量*5
/=5     自身变量/5
%=5   自身变量%5

示例:

2.字符串比较

1.=:等于,字符串内容相同

2.!=:不等于,字符串内容不同,! 号表示相反的意思

3.-z:长度为零,字符串内容为空

4.-n:长度不为零,字符是否存在

5.<:小于(在ASCII值中比较)

6.>:大于(在ASCII值中比较)

3.文件检查

1.-e:测试目录或文件是否存在(Exist)

2.-f:测试是否为文件(File)

3.-d:测试是否为目录(Directory)

4.-s:文件大小不为零,是否存在且非空

5.-r:测试当前用户是否有权限读取(Read)

6.-w:测试当前用户是否有权限写入(Write)

7.-x:测试当前用户是否有权限执行(eXcute)

8.-L: 测试是否为软连接文件

4.逻辑操作符

1.-a:逻辑与

2.-o:逻辑或

3.!:逻辑非

5.其他

1.-nt:比某个文件新

2.-ot:比某个文件旧

3.-ef:两个文件是同一个文件(通过inode号判断)

6.逻辑测试(短路运算)

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...

逻辑运算中的短路测试是指在进行逻辑运算时,如果能够确定整个表达式的值而无需计算所有部分,则可以提前停止计算,从而提高效率。在逻辑运算中,当使用逻辑与(&&)和逻辑或(||)操作符时,存在短路测试的情况。

  1. 逻辑与(&&)的短路测试

    • 如果第一个操作数为假(false),则整个表达式的结果必定为假,因此不会再计算第二个操作数,直接返回结果。
    • 只有当第一个操作数为真(true)时,才会计算第二个操作数,并返回整个表达式的结果。
  2. 逻辑或(||)的短路测试

    • 如果第一个操作数为真(true),则整个表达式的结果必定为真,因此不会再计算第二个操作数,直接返回结果。
    • 只有当第一个操作数为假(false)时,才会计算第二个操作数,并返回整个表达式的结果。

短路测试的应用可以提高代码的效率,特别是在条件语句中,可以根据短路测试的特性来优化代码。例如,在条件判断中,将不太可能发生的情况放在前面可以利用短路测试来减少不必要的计算。

示例:

// 短路测试示例
int a = 5;
int b = 0;
// 使用逻辑与(&&),如果a为假,则不会计算b的值
if (a != 0 && 10 / a > b) {System.out.println("条件成立");
} else {System.out.println("条件不成立");
}
// 使用逻辑或(||),如果a为真,则不会计算b的值
if (a == 0 || 10 / a > b) {System.out.println("条件成立");
} else {System.out.println("条件不成立");
}

在上述示例中,如果a为0,则不会进行除法运算,因为在逻辑与和逻辑或中,第一个操作数为假或者真时,不会再计算第二个操作数。

常见条件

  • -a或&&:逻辑与,“而且”的意思全真才为真

  • -o或||:逻辑或,“或者”的意思一真即为真

  • !:逻辑否

|| 只有前面不成立时才会执行后面的操作

7.双中括号

在Shell编程中,双中括号([[ ... ]])是一种用于条件测试的语法结构,通常用于if语句或while循环中。它相比于单中括号([ ... ])在功能上更加强大,支持更多的条件测试和比较操作,并且在语法上更加灵活。

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

8.()和{ }用法

在Shell编程中,(){} 是两种不同的语法结构,各自有着不同的用途和功能。

1.小括号()

  • 命令组合:小括号可以将一系列命令组合在一起,形成一个子shell。在子shell中执行的命令不会影响到当前shell的环境。

(cd /path/to/directory && ls)

  • 数组赋值:小括号也可以用来定义数组,并为数组赋值。

arr=(apple banana orange)

  • 算术扩展:小括号可以用于算术扩展,对其中的表达式进行算术运算。

result=$((3 + 5))

2.大括号{ }

  • 代码块:大括号可以用来创建代码块,在代码块中可以包含一系列命令,作为一个整体来执行。

{

echo "Hello"

echo "World"

}

  • 参数扩展:大括号可以用于参数扩展,对大括号中的内容进行扩展。

echo file{1..5}.txt # 输出:file1.txt file2.txt file3.txt file4.txt file5.txt

  • 函数定义:大括号也可以用于定义函数,函数体内的命令都将被视为函数的内容。

my_function() {

echo "This is a function"

}

  • 变量名扩展:大括号也可用于扩展变量名,通常用于避免歧义。

var="Hello"

echo "${var}World"

总的来说,小括号和大括号在Shell编程中有着不同的用途,能够提供一些方便的功能和语法结构,使得Shell脚本更加灵活和强大。

9.echo命令

echo -n   表示不换行输出
echo -e   表示输出转义符

选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行

10.date

date查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

二.if语句的结构

1.if语句结构类型

(1)单支结构

程序执行到语句判断,进行判断,如果是就进行执行,否就直接结束

单分支
if 判断条件;
then   条件为真的分支代码
fi

(2)双支结构

程序执行到语句判断,进行判断,如果是就执行语句1,否就执行语句2.然后结束

双分支
if 判断条件; then条件为真的分支代码
else条件为假的分支代码
fi

(3)多支结构

多分支
if 判断条件1
then条件1为真的分支代码
elif 判断条件2
then条件2为真的分支代码
elif 判断条件3;then条件3为真的分支代码
...
else以上条件都为假的分支代码  托底
fi

2.if语句相关解析

  • if 后面是一个条件,它可以是命令的返回状态码、字符串比较、数值比较等等。在方括号 [ ] 中的条件可以是各种表达式,如 -f filename 表示判断文件是否存在、$var -eq 10 表示判断变量是否等于 10 等等。
  • then 关键字指示如果条件为真,则执行紧随其后的代码块。
  • elif 是 else if 的缩写,用于添加额外的条件检查。可以有零个或多个 elif 部分。
  • else 用于处理所有前面的条件都不满足的情况。它是可选的。
  • fi 是 if 的倒写,用于结束 if 结构。

3.多分支举例

成绩单

三.case语句

case 语句是一种在 Shell 脚本中用于多重条件判断的结构。它通常与 esac 一起使用,用于测试一个变量与多个模式之间的匹配情况

基本语法:

case 变量名 in模式1)命令序列1;;模式2)命令序列2;;...)命令序列...;;*)默认命令序列;;
esac
  • 变量名:要测试的变量名。
  • 模式1模式2 等:模式用于匹配变量的值。如果变量的值与某个模式匹配,则执行相应的命令序列。
  • 命令序列1命令序列2 等:与每个模式匹配时要执行的命令序列。
  • ;;:用于终止每个模式的命令序列。
  • *:通配符,用于匹配所有未被前面模式匹配的情况。
  • 默认命令序列:当变量值与所有模式都不匹配时要执行的命令序列。
  • ?:任意单个字符

四.循环语句

1.for循环语句

for 循环是一种在编程中常用的循环结构,用于重复执行一段代码直到满足特定条件为止

for循环由三个关键部分组成:

  1. 初始化(Initialization):在循环开始之前执行一次的语句,用于初始化循环变量或设置起始条件。
  2. 循环条件(Condition):在每次循环迭代之前被检查的条件。如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
  3. 迭代(Iteration):在每次循环结束后执行的语句,用于更新循环变量的值。

语法结构类型

(1)列表循环

(2)不带列表循环

(3)类C风格的for循环

for 循环的基本工作流程如下:

  1. 执行初始化部分。
  2. 检查循环条件。如果条件为真,则执行循环体;如果条件为假,则退出循环。
  3. 执行循环体。
  4. 执行迭代部分。
  5. 返回步骤 2,重复以上过程,直到循环条件为假为止。

for 循环通常用于需要固定次数的迭代,或者在已知起始点和结束点的情况下。然而,它也可以用于迭代数组、集合等数据结构中的元素。

示例

(1)由1加到100的总和

(2)批量添加用户

#!/bin/bash
uname=20
for ((i=1; i<=uname; i++))
douseradd $iecho "123" |passwd --stdin  $i &>/dev/null
done

2.while循环

while 循环是编程中常用的一种循环结构,它在指定条件为真(true)时重复执行代码块。

while循环通常的语法

while condition:# 在条件为真时执行的代码块

在这个语法中,condition 是一个表达式,当它的值为真时,循环中的代码块会被执行。每次执行完代码块后,条件会再次被检查,如果条件仍然为真,循环将继续执行;直到条件变为假(false)时,循环停止。

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

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

相关文章

【opencv】图像处理(二)

前文指引 一、使用到的图片 一、梯度计算 原始图片 img cv2.imread(circle.jpg)plt.imshow(img) plt.show()sobel算子 使用两个核 Gx [[-1,0,1], [-2,0,2], [-1,0,1]] Gy [[-1,-2,-1], [0,0,0], [1,2,1]] dst cv2.Sobel(src, ddepth, dx, dy, ksize) ddepth 深度 -1d…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗&#xff1f;&#xff1f;&#xff1f; 找到域馆&#xff0c;拿下域控&#xff01;&#xff01; 拿下了域控就是拿下了整个域&#xff01;&#xff01; 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)&#xff1f;&#xff1f;&#xff1f; …

GCP谷歌云有什么数据库类型,该怎么选择

GCP谷歌云提供的数据库类型主要包括&#xff1a; 关系型数据库&#xff1a;这类数据库适用于结构化数据&#xff0c;通常用于数据结构不经常发生变化的场合。在GCP中&#xff0c;关系型数据库选项包括Cloud SQL和Cloud Spanner。Cloud SQL提供托管的MySQL、PostgreSQL和SQL Se…

提升文本到图像模型的空间一致性:SPRIGHT数据集与训练技术的新进展

当前的T2I模型&#xff0c;如Stable Diffusion和DALL-E&#xff0c;虽然在生成高分辨率、逼真图像方面取得了成功&#xff0c;但在空间一致性方面存在不足。这些模型往往无法精确地按照文本提示中描述的空间关系来生成图像。为了解决这一问题&#xff0c;研究人员进行了深入分析…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

STM32(开篇总结)

STM32介绍 STM32是意法半导体公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器…

数据可视化(十二):Pandas太阳黑子数据、图像处理——离散极值、核密度、拟合曲线、奇异值分解等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

SpringSecurity的核心原理使用总结

1. SpringSecurity的核心原理 对于最原始Servlet请求处理的层次结构 客户端->过滤器链->Servlet 对于在SpringMVC中处理请求的层次结构 如何让Filter与Spring建立连接呢? 因此它增加了一个DelegatingFilterProxy 它是SpringMVC提供的的Filter,它内部代理了一个原生的F…

Spring框架概述

目录 1. Spring框架的起源 2. Spring框架的构成 3. Spring的发展历程 4. Spring的开发环境 4.1. Maven安装与配置 &#xff08;1&#xff09;Maven的下载与安装 &#xff08;2&#xff09;配置Maven的环境变量 &#xff08;3&#xff09;本地仓库的配置 &#xff08;4…

景联文科技:用高质量数据采集标注赋能无人机技术,引领无人机迈入新纪元!

随着无人机技术的不断发展与革新&#xff0c;它已成为现代社会中一个前景无限的科技领域。 无人机应用领域 边境巡逻与安防&#xff1a;边境管理部门利用无人机监控边境线&#xff0c;防止非法越境和其他安全威胁&#xff0c;同时也能监控地面安保人员的工作状态和行动路线。 …

JVM的垃圾回收算法有哪些?从可达性分析算法开始,深入解读三大核心垃圾回收算法

导航&#xff1a; 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 一、概念准备 1.1 GC Roots 1.2 可达性分析算法 1.3 非可达对象被回收过程中的两次标记 1.4…

vue从入门到精通(一):初始Vue

一&#xff0c;Vue是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代…

质量保障之精准测试!

一、背景与概念 随着软件测试行业的长足发展&#xff0c;测试理念、技术都在发生着日新月异的变化。因此一套完整的自动化测试用例对于每个软件公司都是不可或缺的&#xff0c;然而虽然有如此规模宏大的自动化案例集资源投入&#xff0c;同时也有大量人力的投入&#xff0c;但…

虚拟仿真云平台在教育应用中的优势和意义

虚拟仿真云实验教学平台作为一种新型的教学方法&#xff0c;近年来在高校教育中得到了十分广泛的应用。它通过模拟真实的实验场景和实验操作&#xff0c;让学生在计算机上进行实验操作和数据处理&#xff0c;为学生提供了更加便捷、可靠、有效的实验学习环境。本文&#xff0c;…

Python如何绘制直流电机开闭环特性曲线?matplotlib

import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [FangSong] # 指定默认字体 mpl.rcParams[axes.unicode_minus] False # 解决保存图像是负号-显示为方块的问题# 数据集1 n1 [1206, 1174, 1141, 1116, 1037, 986] Id1 [0.505, 0.55…

【多模态】30、GPT4V_OCR | GPT4V 在 OCR 数据集上效果测评

文章目录 一、背景二、测评2.1 场景文本识别2.2 手写文本识别2.3 手写数学公式识别2.4 图表结构识别&#xff08;不考虑单元格中的文本内容&#xff09;2.5 从内容丰富的文档中抽取信息 三、讨论 论文&#xff1a;EXPLORING OCR CAPABILITIES OF GPT-4V(ISION) : A QUANTITATIV…

centos7.6安装mysql

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 1.在网页中寻找mysql…

【QT】QT环境搭建

本专栏内容为&#xff1a;QT学习专栏 通过本专栏的深入学习&#xff0c;你可以了解并掌握QT。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;QT &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f…

WordPress 管理员密码重置方法汇总

最近明月碰到一个 WordPress 站长求助咨询&#xff0c;说是自己 WordPress 站点的管理员密码被恶意篡改了&#xff0c;对 WordPress 了解的都知道这一般都是恶意代码造成的&#xff0c;问题大多出在使用了所谓的破解版、去授权版的插件或者主题被植入了恶意代码、后门木马。明月…

洗地机哪个牌子好性价比高又实惠?高性价比洗地机推荐【避坑指南】

洗地机是一种智能清洁家具&#xff0c;具有强大的清洁能力&#xff0c;可快速有效地清洁各种地面污渍&#xff0c;操作简便&#xff0c;省时省力。其一键操作功能使其易于上手&#xff0c;无需频繁清洗拖布和更换水&#xff0c;大大提高了清洁效率。部分高端洗地机还具备智能感…