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++))
do
   useradd $i
   echo "123" |passwd --stdin  $i &>/dev/null
done

2.while循环

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

while循环通常的语法

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

永嘉原厂8×16点阵数码管驱动抗干扰数码管驱动IC防干扰数显芯片VK1640 SOP28

产品型号&#xff1a;VK1640 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP28 原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01; 概述 VK1640是一种数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有数据锁存器、LED 驱动等电路。SEG脚接LE…

netstat命令详解

netstat网络连接分析工具 工具说明&#xff1a; netstat 是一款命令行工具&#xff0c;主要是用于列出系统上所有的网络套接字连接情况&#xff0c;包括 tcp, udp 以及 unix 套接字&#xff0c;另外它还能列出处于监听状态&#xff08;即等待接入请求&#xff09;的套接字。除…

SpringBoot集成Curator实现Watch事件监听

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Zookeeper是一个Ap…

【MySQL】常见的数据类型

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;MySQL 目录 &#x1f449;&#x1f3fb;常见的数据类型bit类型enumset集合查询函数find_ in_ set &#x1f449;&#x1f3fb;浮点类型float类型decimal &am…

用友U8与旺店通的对接案例分析

在现代企业管理中&#xff0c;财务管理和电商运营管理是企业数字化转型的两个重要组成部分。用友U8作为企业的财务管理系统&#xff0c;与旺店通这一电商ERP系统的结合&#xff0c;可以为企业带来全面的数据整合和流程自动化。本文将通过轻易云集成平台的视角&#xff0c;分析用…

weblogic [WeakPassword]

一、漏洞描述 开放了wblogic端口&#xff0c;进去发现有任意读取文件漏洞&#xff0c;配合解密工具读出密码&#xff0c;登录后台传入webshell 二、影响版本 当前版本 三、影响组件 weblogic 四、漏洞判断 hello/file.jsp?path/etc/passwd 发现有任意文件下载 五、漏洞…

47.全排列

1.题目 47. 全排列 II - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/permutations-ii/description/ 2.思路 注意剪枝的条件 3.代码 class Solution {vector<int> path;vector<vector<int>> ret;bool check[9]; public:vector<…

防伪溯源一体化管理系统基于FastAdmin+ThinkPHP和Uniapp(源码搭建/上线/运营/售后/维护更新)

一款基于FastAdminThinkPHP和Uniapp进行开发的多平台&#xff08;微信小程序、H5网页&#xff09;溯源、防伪、管理一体化独立系统&#xff0c;拥有强大的防伪码和溯源码双码生成功能&#xff08;内置多种生成规则&#xff09;、批量大量导出防伪和溯源码码数据、支持代理商管理…

JavaScript数组(Array)方法 - toReversed、toSorted、toSpliced

最近发现几个数组方法&#xff0c;是一些常规方法的升级版&#xff0c;比较有意思&#xff0c;分享给大家 文章目录 一、温故二、知新toReversedtoSortedtoSpliced 一、温故 我们先来回顾几个比较常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice众所周知&a…

信号和槽基本概念

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、概述 二、信号的本质 三、槽的本质 一、概述 在 Qt 中&#xff0c;用户和控件的每次交互过程称…

【会议征稿】2024年软件自动化与程序分析国际学术会议(SAPA 2024)

目录 1. 会议官方2. 支持单位3. 大会简介4. 大会组委5. 征稿主题6. 会议出版7. 会议议程8. 参会方式9. 更多会议 1. 会议官方 重要信息&#xff1a; 大会官网&#xff1a;www.icsapa.org大会时间&#xff1a;2024.6.14-16日大会地点&#xff1a;中国-大理接受/拒稿通知&#…

品牌舆情都包含什么内容?建议收藏

一个品牌的声誉、形象、产品质量、服务质量等&#xff0c;无时无刻不在接受着大众的检验。互联网传播迅速&#xff0c;一个不好的舆论直接导致整个品牌的声誉受到严重影响。品牌舆情都包含什么内容&#xff1f;接下来伯乐网络传媒就来给大家讲一讲。 一、品牌舆情的基本构成 1…

数据可视化(十):Pandas数据分析师职位信息表分析——箱线图、水平柱状图、学历城市双维分析等高级操作

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

STM32+CubeMX移植HAL库实现SYN6288语音合成模块模块

这里写目录标题 SYN6288语音模块简介引脚定义注意要点CubeMX配置HAL库移植运行结果 SYN6288语音模块简介 SYN6288中文语音合成芯片是北京宇音天下科技有限公司于2010年初推出的一款性/价比更高&#xff0c;效果 更自然的一款中高端语音合成芯片。SYN6288通过异步串口(UART)通讯…

picoCTF-Web Exploitation-Java Code Analysis!?!

Description BookShelf Pico, my premium online book-reading service.I believe that my website is super secure. I challenge you to prove me wrong by reading the ‘Flag’ book!Here are the credentials to get you started: Username: “user”Password: “user” S…

计算机发展史故事【11】

爆发超新星 IBM 号称巨人&#xff0c;竟在巨型机领域败在小小的控制数据公司CDC 手下。在小型机领域&#xff0c;“霸主”DEC 公司的“后院”也曾“起火”&#xff0c;绝非一直风平浪静。 本世纪60 年代末&#xff0c;DEC 公司因开发小型电脑迅速崛起&#xff0c;赢得“小型机…

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

Android Studio Please select Android SDK

解决方案&#xff1a; 1、打开 SDK Manager 2、选择编辑&#xff08;Edit&#xff09; 3、 一直Next&#xff0c;直到完成&#xff0c;解决&#xff01;

科技查新中的工法查新点如何确立与提炼?案例讲解!

按《工程建设工法管理办法》( 建 质&#xff3b;2014&#xff3d;103 号) &#xff0c;工法&#xff0c;是指以工程为对象&#xff0c;以工艺为核心&#xff0c;运用系 统工程原理&#xff0c;把先进技术和科学管理结合起来&#xff0c;经过一定工程实践形成的综合配套的施工方…

redis安装与群集

项目需求&#xff1a; 1.安装redis 2.测试redis性能&#xff0c;100个并发连接&#xff0c;100000个请求测试 3.在当前数据库下创建键值对 a11,a22,a33,a44&#xff0c;a55 4.查看键值对 5.将a1改名为a11,将a2删除 5.将a3移动到1号数据库 6搭建redis集群(可选) 测试环境…