首页 > 系统相关 >Shell条件语句

Shell条件语句

时间:2024-07-19 15:29:31浏览次数:13  
标签:语句 case Shell 是否 判断 测试 条件

一、条件测试操作

1.1、文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否   可读、可写、可执行等。文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。

格式1 test 条件表达式
格式2 [ 条件表达式 ]    #注意中括号和表达式中间需要隔一个空格

-d:测试是否为目录(Directory)。
-e:测试目录或文件是否存在(Exist)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read)。
-w:测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-s:测试存在且文件大小为空
-L:测试是否为链接文件

执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。(0为真;1为假)

1.2、整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要  比较的两个整数之间。

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

1.3、字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。

=:第一个字符串与第二个字符串相同。
!=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反。
-z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串。

1.4、逻辑测试


逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。  

● &&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值  才为 0(结果成立)。使用 test命令测试时,“&&”可改为“-a”。

● ||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为“-o”。

● !:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)。

二、if语句的结构

2.1、双中括号

单个括号([ ]):必须要有空格 两个字符或数字之间的比较左右必须有空格
    条件判断:test一种形式,[ ]中间只能使用 = 和 != 比较字符串 ,如果使用 < 、>需要进行转义\.
    然后中间如果比较数字要用 -lt 等符号, 不能使用\<比较数字,他会当成字符串处理
两个括号([ [  ] ]):可用于处理逻辑命令,也可以处理字符串是否相等,且使用 < 、>不用转义符。

2.2、单分支 if 语句

单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。

if 条件测试操作 
then
命令序列 
fi    #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误

或者

if 条件测试操作;then
命令序列 
fi 

2.3、双分支 if 语句

双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作。

if     判断条件
then
执行命令1
else
执行命令2
fi

2.4、多分支if语句

与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作

if     判断条件
then
执行命令1
elif   判断条件
执行命令2
elif   判断条件
执行命令3
else
执行命令 n
fi

2.5、嵌套if语句

if 判断是否启动
if 如果启动------输出已启动
     如果没启动----判断是否安装---如果安装---启动
                           如果没安装----安装---如果安装成功---启动
                                                                 如果安装不成功-----报错

三、case语句

case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写。
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。

case 变量值 in
模式 1)
    命令序列 1
    ;;
模式 2)
    命令序列 1
    ;;
* )
    默认命令序列
esac

case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。双分号“;;”表示命令序列的结束。

标签:语句,case,Shell,是否,判断,测试,条件
From: https://blog.csdn.net/pangdongqiqi/article/details/140495369

相关文章

  • shell脚本一键编译WiFi配置需要的工具
    #!/bin/bashPLATFORM='hi3519dv500'PLATFORM_COMPILE=aarch64-v01c01-linux-musl-COMPILE_CC="$PLATFORM_COMPILE"gccCOMPILE_STRIP="$PLATFORM_COMPILE"stripCOMPILE_AR="$PLATFORM_COMPILE"arCOMPILE_RANLIB="$PLATFO......
  • try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么
    在Java编程中,可能会遇到在try块中包含有返回语句的情况。那么紧随其后的finally块中的代码是否会被执行呢?在这种情况下,finally块中的代码会在返回语句执行前执行还是执行后呢?让我们来探讨一下这个问题。首先,让我们回顾一下Java中try-catch-finally语句块的执行顺序。在try块中......
  • idea内置数据库DataGrip + 多表操作sql语句
    多表操作:一对多(多对一),一对一,一对多可以通过物理外键实现,但实际上更推荐使用逻辑外键以下均为物理外键使用方法--=====================================多表设计================================---------------------一对多职位与员工--员工子表createta......
  • 复杂控制语句
    我们想要显示序号,可以通过loop.index来展示这里我们想遍历一个复杂的列表字典,可以通过dict.items(),获取到字典的键和值 实现效果: 代码实现:fromflaskimportFlask,render_templateapp=Flask(__name__)student={"name":"zhangsan","age":17,"gender":"男",}st......
  • Bash shell
    Bashshellvimfirst.sh#!/bin/bash#bash#!/bin/sh#shellviriable="nishidashabi"#变量间没有空格chmod-xfirst.sh./first.sh#执行shell语法shell解释器标志#!bin/bash#使用的是bashshell变量命名viriable="nishishui?"#变量定义没有空格for......
  • 【攻防技术系列+PowerShell】无文件落地攻击
    #红队#MSF#powershell虚拟机环境搭建:【Kali】,192.168.10.131【win7】,192.168.10.134接上文:【攻防技术系列】MSF进程迁移,用的是里面的1.exe。如果遇到端口占用情况,可以采用以下解决方案:之后在【win7】中使用powershell执行以下命令,实现无文件落地攻击powershell-nop......
  • 表达式和控制语句
    表达式最常用的是变量,由Flask渲染模板时传过来,比如name也可以是任意一种Python基础类型,比如字符串{{stu_list}};或者数值,列表,元祖,字典,布尔值。运算。包括算数运算,如{{2+3}};比较运算,如{{2>1}};逻辑运算,如{{FalseandTrue}}过滤器|和测试器is函数调用,如{{current_ti......
  • 探讨C++中巧妙的边界条件处理:以花坛种花问题为例【巧妙思想、边界条件】
    在算法题中,处理数组的边界条件是一个常见的挑战。特别是在涉及多条件判断时,如何高效且清晰地处理边界问题,可以显著提升代码的简洁性和可读性。本文将以一道经典的算法题——花坛种花问题,来探讨边界条件的巧妙处理方法。问题描述605.种花问题-力扣(LeetCode)给定一个由......
  • idea内置数据库 + sql语句库表操作
    表数据操作,表是上一个博客里的表tb_emp--dml:数据操作语言--dml:插入数据-insert--1.为tb_emp表的username,name,gender字段插入值--所有用到引号的地方,用单引号双引号都可以insertintotb_emp(username,name,gender,crate_time,update_time)value('red','小红',1......
  • SQL中用于处理条件逻辑和空值的函数
    在SQL中,CASEWHEN语句、COALESCE函数、IF函数(在某些数据库系统中,如MySQL)、IFNULL函数(同样在MySQL等中)以及NULLIF函数都是用于处理条件逻辑和空值(NULL)的重要工具。下面分别介绍这些函数,并提供相应的使用示例。CASEWHEN语句CASEWHEN是SQL中的条件表达式,允许你根据一系列条......