Shell 语法——if else 详解

shell选择结构(if-else) 2.根据命令的返回状态值来判断进程是否存在。3.根据逻辑用脚本语言实现。类似于C语言的比较方法。1.查看进程的相关命令。 阅读详情
AI摘要

本文介绍了shell中if语句的语法格式,google规范推荐将相关内容放在同一行。还详细阐述了判断条件,包括空格使用规则、不同括号区别、字符串和数字的比较运算符、逻辑运算符,以及文件状态判断等,如文件是否存在、是否为目录等。

一、语法格式

shell 中的 if 语句的格式如下:

if 条件; then
  command1
else
  command2
fi

或者将 then 单独另起一行也可以,这时条件后面的 ; 便可以去掉:

if 条件
then
  command1
else
  command2
fi

google 规范推荐使用第一种,即:将 ; do , ; then 和 while , for , if 放在同一行。

比如:

if [[ $a == $b ]]; then
  echo "equal"
fi

二、判断条件

if 的判断条件如何写,这里面大有文章。

1、空格的使用

shell脚本对空格有严格的规定:

  • 赋值语句中等号=两边不能有空格,而字符串比较中等号=、==两边必须有空格。
  • 中括号[]、[[]]前后一定要加空格。
$ i=1   # =用作赋值时,两边绝对不能有空格           
$ if [ $a = $b ] # =、==等用作比较判断时,两边必须有空格;中括号前后一定要加空格。

2、不同括号的区别

在if条件中常见的括号有三种:(())、[]、[[]],区别如下:

(1)(())只能进行整数比较,不能用于字符串比较,括号中的变量可以省略$符号前缀,当然也可以带着。

(2)[]和[[]]的区别:

  • 本质上,[]和test是等价的,都是命令,而[[]]是关键字,所以重定向等字符在[]中会被认为成重定向,而在[[]]中是比较符号的意思。
  • &&、||、<和> 操作符能够正常存在于[[]]条件判断结构中,但是如果出现在[]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不使用双括号, 则为if [ $a != 1] && [ $a != 2 ]或者if [ $a != 1 -a $a != 2 ]
  • [[]]支持字符串的模式匹配,[]不支持。使用=或==进行字符串比较,等号右边的可以作为一个模式,比如[[ "hello" == hell? ]]为真。模式匹配不能加引号,否则会作为固定字符串,如[[ "hello" == "hell?" ]]为假。
  • [[]]支持算术扩展,而[]不支持。如if [[ 1+2 -eq 3 ]],而if [ 1+2 -eq 3 ]则会报错。

3、比较运算符

在shell中对比字符串和对比数字,是要分开两种方式:

字符串对比

对比字符串只能使用=、==、<、>、!=、-z、-n。其中,-n 表示字符串不为空,即长度大于0,-z 表示字符串为空,即长度为0。

备注:

  • 使用[]对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为[ $ax == "ab"x ]如果没有了x ,并且$a是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。
  • 使用<或者>时,如果是用[],需要用转义\,如\>。
  • 使用-z -n时,如果是用 [],则字符串一定要加双引号(单引号都不行),如:[ -n "$a" ];如果是用[[]],则加不加双引号都可以(但一定不能加单引号)。

数字对比

对比数字,只能使用==、=、!=,或者 -eq、-ne、-gt、-ge、-lt、-le。其中-eq的意思是 equal,-ne是 unequal,-gt是 greater than,-ge是 greater than or equal to,-lt是 less than,-le是 less than or equal to。

备注:

  • 在[] [[]]中,数字对比不支持 > < <= 和>=,比如[[ 1 -gt -1 ]]为真,但[[ 1 > -1 ]]为假。
  • 在(())中,数字对比是支持 > < <= 和>= 的,但不支持 -eq、-ne、-gt、-ge、-lt、-le等。这是因为括号内只要符合C语言规则的运算符都可以。

=与==的区别(字符串和数字均适用):
1、在 [ ] 或 [[]] 中,= 与 == 表示判断,是等价的
2、在·(( )) 中, = 表示赋值, == 表示判断,它们不等价

4、逻辑运算符

and可以用-a 或 &&表示,or可以用-o或||表示。它们在[]和[[]]是不同的:

  • [[]]只能使用&& ||,不能使用-a``-o。&&``||写在括号里或外都可以。
  • (())与[[]]相同,只不过可以省略变量前的$,且只能用于整数比较。
  • []既可以使用&& ||,也可以使用-a``-o。但&&``||必须在括号外,-a``-o必须在括号内。

即:

括号内连接括号外连接
[]-a -o&& ||
[[]]&& ||&& ||

比如a=3 ; b=2 ; c=4,要判断是否a>b且a<c,有以下几种正确的写法:

if (( a > b )) && (( a < c )) # 正确
if (( a > b && a < c )) # 正确
if [[ $a -gt $b ]] && [[ $a -lt $c ]] # 正确
if [[ $a -gt $b && $a -lt $c ]] # 正确
if [ $a -gt $b ] && [ $a -lt $c ] # 正确
if [ $a -gt $b -a $a -lt $c ] # 正确

5、文件判断

可以在if中进行文件状态的判断,常用的包括:

  • -e 文件是否存在

  • -d 表示文件是否是目录

  • -f 文件是否是普通文件(不是目录、设备文件、链接文件)

  • -s 表示文件大小不为0

  • -b 表示是块设备(光驱、软盘等)

  • -c 表示是字符设备(键盘、声卡等)

  • -p 表示是管道

  • -h 表示是符号链接

  • -S 表示是否是socket

  • -r、-w、-x表示文件是否有可读、可写、可执行权限(指运行这个测试命令的用户)

  • f1 -nt f2 f1是否比f2新(new than)

  • f1 -ot f2 f1是否比f2旧(old than)

  • f1 -ef f2 f1和f2是否是相同文件的硬链接

使用!时表示上述结果取反,比如:

myfile="test.txt"
if [ ! -e $myfile ]; then
    echo $myfile" is not exist"
    touch $myfile
else
    echo $myfile" is exist"
fi
QWEN 2.5模型结构解析与代码解读 对Qwen2.5大模型的代码进行研究 阅读详情

相关推荐

DICOM三维重建:基于VTK实现三种面绘制算法

版本:VS2019、VTK9.0.1 #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2) #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #i

一直在笑的博客 5922

Linux Shell脚本实战:逻辑控制语句(if-else,case)的深度解析与应用

本文深入解析Linux Shell脚本中的逻辑控制语句if-else和case的用法,包括基础语法、条件测试、多分支结构及实战应用。通过文件备份、系统监控等实际案例,帮助开发者掌握Shell脚本编程技巧,提升自动化任务处理能力。特别适合Linux系统管理员和Shell脚本初学者学习参考。

weixin_29280219的博客 689

用Python对CAPM和Fama French Three Factor model的初步学习

用Python对CAPM和Fama French Three Factor model的初步学习概述介绍建模与分析CAPMFama French Three-Factor Model总结 概述 本文主要使用CAPM(资本资产定价模型)和Fama French Three Factor model来评估中国股票市场的股票价格。 使用CAPM来选择投资组合,然后建立Fama法国三因素模型来评估投资组合...

weixin_43168138的博客 5456

8.shell 分支判断 if else

分支判断 if else一级目录二级目录三级目录 一级目录 二级目录 三级目录

其木王·王子的博客 1万+

华为OD机试真题 Java&Go 实现【优雅子数组】【100%通过率】【2022.11 Q4 新题】

如果一个数组中出现次数最多的元素出现大于等于K次,被称为K -优雅数组,k也可以被称为优雅阈值。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,数组1,2,3,1,2就不是一个3-优雅数组,因为其中出现次数最多的元素是1和2,只出现了2次。给定一个数组A和k,请求出A有多少子数组是k-优雅子数组。

MISAYAONE的博客 1万+

Sigrity System Explorer ViaWizard模式进行过孔建模和仿真分析操作指导

点击TVac_lower tdvac_lower,自动跳转到2D时域曲线,查看最小低电平穿过VIL(ac)max电压的延时,结果如下。点击TVac_high tdvac_high,自动跳转到2D时域曲线,查看最小高电平穿过VIH(ac)min电压的延时,结果如下。点击max Vix_Rise,自动跳转到2D时域曲线,查看上升边PN交叉点与参考电压VREF(dc)的偏差,结果如下。Threshold:阈值,软件自带3个模板,default,Tr01,Tr02,本例选择Default。

weixin_54787054的博客 571

Shell编程——选择结构(if else语句、case in语句)

以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。

主要记录嵌入式学习与开发过程。 9831

Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_pre

Sigrity System SI SerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查的项目,通过协议分析视为满足设计要求,下面介绍pcie3_client_single_pre仿真分析,具体操作如下。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1.24%UI RMS(平均值),即和标准值的偏差为1.24%UI。

weixin_54787054的博客 597

Linux Shell脚本入门教程系列之(九)Shell判断 if else 用法

本文是Linux Shell脚本系列教程的第(九)篇,更多shell教程请看:Linux Shell脚本系列教程 判断语句是每个语言都必不可少的关键语法,Shell命令当然也不例外。继上一篇之后,今天就给大家介绍下Shell判断语句 if else 用法。 if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。 Shell 有三种 if else格式: if … fi 格...

Just Code 632

AD快速上手笔记

本文详细介绍了使用Altium Designer从零创建PCB项目全流程:新建工程、绘制原理图(元件放置、连线、电源端口)、编译检查、生成PCB、布局布线(含铺铜)、DRC检查及输出Gerber与钻孔文件。重点强调了库选择、参数修改、层切换、铺铜设置和生产文件导出规范,确保设计无误,便于顺利下单生产。

qq_53529450的博客 41

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2443

python的fi else_Shell脚本语法--if/then/elif/else/fi

Shell脚本语法--if/then/elif/else/fi和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的,例如先前讲过的 www.2cto.comif [ -f ~/.bashrc ]; then. ~/.bashrcfi其实是三条命令,if [ -f ~/.bashrc ]是第一条,the...

weixin_39540725的博客 1138

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6359

Shell语法——if else详解

对比数字,只能使用==、=、!=,或者 -eq、-ne、-gt、-ge、-lt、-le。其中-eq的意思是 equal,-ne是 unequal,-gt是 greater than,-ge是 greater than or equal to,-lt是 less than,-le是 less than or equal to。比较字符串只能使用=、==、、!其中,-n表示字符串不为空,即长度大于0,-z表示字符串为空,即长度为0。and可以用-a 或 &&表示,or可以用-o或||表示。

qq_41201304的博客 8819

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

linux shell if else 语法学习

Shell脚本语法--if/then/elif/else/fi   和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的。 if [ -f ~/.bashrc ]; then     . ~/.bashrc fi 其实是三条命令,if [ -f ~/.bashrc ]是第一条,then .

wulantian的专栏 1414

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时,它是最好的工具。if-else 块即使不是条件编程中最重要的部分,也是其中之一。通过调节特定语句的执行,您不仅可以提高代码效率,还可以释放处理器可能浪费的宝贵时间,这些时间对于特定情况来说是不必要的。

博客之路,前途漫漫 7461

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

shell中if elif else语法

TEST="TEST3" #注意中括号,if后面、中括号后面、等号左右的空格,分号,=或者==都可以,=是字符串的比较 #eq是数字的比较 #注意$TEST需要用引号“”括起来 if [ "$TEST" == "TEST" ];then echo "1" #then的位置可以在;后面,也可以换行 elif [ "$TEST" == "TEST2" ];

ydlmlh的专栏 1125

shell语法if else elif

#!/bin/sh # # test the if .. elif .. else # if [ $1 -gt 0 ] ; then echo "$1 is positive" elif [ $1 -lt 0 ] ; then echo "$1 is negative" elif [ $1 -eq 0 ] ; then echo "$1 is zero" else echo

春来江水绿如蓝 1698

Shell脚本语法--if/then/elif/else/fi

Shell脚本语法--if/then/elif/else/fi   和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的,例如先前讲过的  www.2cto.com   if [ -f ~/.bashrc ]; then     . ~/.bashrc fi 其实是三条命令,if [ -f

kentyu001的博客 5533

12.shell条件判断,if,if else, if elif else语法和示例,回顾[] [[]]的在条件判断中的区别

shell条件判断,if,if else, if elif else语法和示例,回顾[] [[]]的在条件判断中的区别 @[TOC](文章目录) # 回顾[] 和[[]]的区别 ## []/test 两者是一样的,在命令行里test expr和[ expr ]的效果相同。 test的三个基本作用是判断文件、判断字符串、判断整数。支持使用 ”与或非“ 将表达式连接起来。 test中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 2668

Shell脚本流程控制:if-then-elif-else语法详解与实战应用

流程控制是编程语言的核心概念,它使程序能够根据不同的条件执行不同的代码路径,从而实现智能化的决策逻辑。在Shell脚本编程中,流程控制是实现自动化任务从简单命令批处理升级为复杂逻辑工具的关键。其技术价值在于赋予脚本环境感知和动态响应的能力,极大地提升了运维自动化和任务处理的效率。典型的应用场景包括系统监控、日志分析、文件管理、服务部署等日常运维工作。本文聚焦于Shell脚本中最基础且使用频率最高的分支判断语句——if-then-elif-else结构,深入剖析其语法细节,并对比经典`[ ]`测试命令与现代`

weixin_34242819的博客 350

Shell脚本语法-- if/then/elif/else/fi

Shell脚本语法-- if/then/elif/else/fi 和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命 令组成的,例如先前讲过的 if[-f~/.bashrc];then.~/.bashrcfi 其实是三条命令,if [ -...

weixin_34116110的博客 241

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell条件语句】

📌其实很多语言比如js、c#、java 等都有条件语句,而且基本一致,也容易理解,但是shell 条件语句确实看着别扭,但大体是一样的。

李赛赛的专栏 940

linux shell if else 多个选择条件的判断语句 语法

该脚本为,如果满足i 等于mysql、information_schema、performance_schema、db_sys_stat 其中一个那么就跳出执行下面的。 重点介绍:   if 条件语句 [ ] 左右两个都要有一个空格。 #!/bin/bash #2012-12-25 by coco for i in `cat ./db_list.txt` do if [ "$i" =

wulantian的专栏 2万+
上一篇: shell中各种括号(),[],(()),[[]],{}等的作用大全及示例
下一篇: python中matplotlib画图中文乱码的解决方法
HappyRocking
博客等级 码龄12年 222粉丝 176原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值