【Shell】各种条件语句的使用——test语句、if语句、case语句

本文详细介绍了Shell编程中的条件语句,包括if语句的基本语法、嵌套结构以及case语句的使用。涵盖了测试表达式(如test、[]、[[]]和逻辑操作符)、文件类型测试和字符串比较等内容。
摘要由CSDN通过智能技术生成

Shell条件语句的使用


条件测试的语法

语法1:test <测试表达式>
利用test命令进行条件测试表达式的方法。test命令与<测试表达式>之间至少有一个空格。

语法2:[ <测试表达式> ]
通过[](单中括号)进行条件测试表达式的方法,和test命令用法相同。[]的边界和内容之间至少有一个空格。

语法3:[[ <测试表达式> ]]
通过[[]](双中括号)进行条件测试表达式的方法,比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。

语法4:((<测试表达式>))
通过(())(双小括号)进行条件测试表达式的方法,一般用于if语句。(())(双小括号)两端不需要有空格。

test条件测试的简单语法及示例

test条件测试的语法格式为:test<测试表达式> 对于如下语句: test -f file && echo true || echo false

该语句表示如果file文件存在,则输出true,否则(||)输出false。这里的&&是并且的意思。test的-f参数用于测试文件是否为普通文件,test命令若执行成功(为真),则执行&&后面的命令,而||后面的命令是test命令执行失败之后(为假)所执行的命令。 test命令测试表达式的逻辑也可以用上述表达形式的一半逻辑(即仅有一个&&或||)来测试,示例如下。

test -f /tmp/test.txt && echo 1 #<==若表达式成功,则输出1。
test -f /tmp/test.txt || echo 0 #<==若表达式不成功,则输出0。

[](中括号)条件测试语法及示例
[]条件测试的语法格式为:[ <测试表达式> ],注意[]两边有空格

-f /tmp/ywx.txt ] && echo 1 || echo 0

如果/tmp/ywx.txt文件存在,则输出1,否则(||)输出0。这里的&&表示并且。[]的应用同test命令,若中括号里的命令执行成功(返回真),则执行&&后面的命令,否则执行||后面的命令。 []测试表达式的逻辑也可以用如下的语法来判断逻辑的表达式写法(test命令的用法也适合于此),即: [ -f /tmp/ywx.txt ] && echo 1 #<==若表达式成功,则输出1。 [ -f /tmp/ywx.txt ] || echo 0 #<==若表达式不成功,则输出0

-d(directory)目录
文件存在且为目录则位真,及测试表达式成立

-f(file)文件
文件存在且为普通文件则位真,及测试表达式成立

-e(exist)
文件存在则为真,及测试表达式成立。不区分文件或目录。

-r(read)文件
文件存在且有可读权限则为真,及测试表达式成立

-s(size)文件
文件存在且文件小大不为0则为真,及测试表达式成立

-w(write)文件
文件存在且有可写权限则为真,及测试表达式成立

-x(executable)文件
文件存在且有可执行权限则为真,及测试表达式成立

-L(link)文件
文件存在且为链接文件则为真,及测试表达式成立

f1 -nt f2, nt(newer than)
文件f1比文件f2新则为真,及测试表达式成立。根据文件的修改时间来计算

f1 -ot f2, ot(older than)
文件f1比文件f2旧则为真,及测试表达式成立。根据文件的修改时间来计算

字符串测试表达式

字符串测试表达式
字符串测试操作符的作用包括:比较两个字符串是否相同、测试字符串的长度是否为零、字符串是否为NULL等

-n "字符串"
若字符串长度不为0,则为真,及测试表达式成立,n(no zero)

-z "字符串"
若字符串长度为0,则为真,及测试表达式成立,z(zero)

"字符串1" = "字符串2"
若字符串1等于字符串2,则为真,及测试表达式成立,也可以使用"=="

"字符串1" != "字符串2"
若字符串1不等于字符串2,则为真,及测试表达式成立,不能使用!==

·对于字符串的测试,一定要将字符串加双引号之后再进行比较。如[ -n "$myvar" ],特别是使用[]的场景。
·比较符号(例如=和!=)的两端一定要有空格。
·“!=”和“=”可用于比较两个字符串是否相同。

整数二元比较操作符

在[]和test中使用的比较符

-eq:相等
-ne: 不等于
-gt: 大于
-ge: 大于等于
-lt: 小于
-le:小于等于

在(())和[[]]中使用的比较符号·

====
>
>=
<
<=

1)·“=”和“!=”也可在[]中做比较使用,但在[]中使用包含“>”和“<”的符号时,需要用反斜线转义,有时不转义虽然语法不会报错,但是结果可能会不对。
2)·也可以在[[]]中使用包含“-gt”和“-lt”的符号,但是不建议这样使用。
3)·比较符号两端也要有空格。

逻辑操作符

1、逻辑操作符
在[]和test中使用

-a and,与,两端都为真,则结果为真
-o or,或,两端有一个为真,则结果为真
!  not,非,两端取反,则结果为真

在[[]]和(())中使用

&& and,与,两端都为真,则结果为真
|| or,或,两端有一个为真,则结果为真
!   not,非,两端取反,则结果为真

测试表达式test、[]、[[]]、(())的区别总结
在这里插入图片描述

if的条件语句的语法

1、基本语法:

if [ command ]; then
     符合该条件执行的语句
fi

2、扩展语法

if [ command ];then
     符合该条件执行的语句
elif [ command ];then
     符合该条件执行的语句
else
     符合该条件执行的语句
fi

if的嵌套

格式一:

  if [ condition ]
  then 
        if [ condition ]
        then 
            commands1
        else
            commands2
         fi    
   fi

格式二:

if [ condition ]
then 
    if [ condition ]
    then 
         commands1
    else    
         commands2
    fi
else
    commands3
fi

case语句语法

case 变量名 in
  值1) 
   指令1 
  ;; 
  值2) 
   指令2 
  ;; 
  值3) 
   指令3 
  ;; 
   *)
    默认
esac

case语句会将该变量的值与每个值相比较,如果与某个值相等,则执行该value所对应的一组语句。当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句。


在这里插入图片描述

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值