shell条件测试

shell条件测试

shell条件测试的基本语法

 文件测试表达式 

字符串表达式 

 逻辑运算符

 &&、|| 和 !的优先级为:

整数测试表达式 

 逻辑操作符

练习如下 

 实验1:通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。

代码如下

 运行结果 


shell条件测试

为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以,了解和掌握这些条件测试是非常重要的。

shell条件测试的基本语法

shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条件为真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。

条件测试语法

说明

语法1: test <测试

表达式>

test命令和<测试表达式>之间至少有一个空格

语法2:[ <测试表达式> ]

该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格

语法3:[[ <测试表达式> ]]

比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可以使用通配符等进行模式匹配

语法4:((<测试表达

式>))

一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数

 文件测试表达式 

常用的文件测试操作符

说明

-a/-e 文件

文件是否存在

-b 文件

文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果为0

-c 文件

文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0

-L 文件

文件存在且为链接文件则为真

-d 文件

文件存在且为目录则为真,即测试表达式成立

-f 文件

文件存在且为普通文件则为真,即测试表达式成立

-s 文件

文件存在且文件大小不为0则为真

-u 文件

文件是否设置suid位,如果设置了suid,则结果为0

-r 文件

文件存在且可读为真

-w 文件

文件存在且可写为真

-x 文件

文件存在且可执行则为真

f1 -nt f2,nt为newer than

文件f1比文件f2新则为真,根据文件的修改时间来计算

f1 -ot f2,ot为older than

文件f1比文件f2旧则为真,根据文件的修改时间来计算

示例: 

字符串表达式 

常用字符串测试操作符

说明

-n “字符串”

若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero

-z “字符串”

若字符串的长度为0,则为真,z可以理解为zero

“串1”=“串2”

若字符串1等于字符串2,则为真,可使用==代替=

“串1”!=“串2”

若字符串1不等于字符串2,则为真

 -n与-z的练习

 逻辑运算符

 &&、|| 和 !的优先级为:

! > && > ||

 练习如下

练习1:让用户输入一个文件名,并做如下判断:

  1. 如果用户输入的文件为空时显示:you must input a filename,并中断程序;
  2. 如果用户输入的文件不存在时,显示the file do not exist,并中断程序;
  3. 如果文件存在,判断该文件的文件类型和执行者对该文件所拥有的的权限。

 

运行如下

 

整数测试表达式 

[]以及test中使用的比较符号

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

说明

-eq

==或=

相等,全拼为equal

-ne

!=

不相等,全拼为not equal

-gt

>

大于,全拼为greater than

-ge

>=

大于等于,全拼为greater

equal

-lt

<

小于,全拼为less than

-le

<=

小于等于,全拼为less equal

 注意:=和!=也可在[]中作比较时使用,在[]中也可使用>和<符号,但需要使用反斜线转义,有时不转译虽然语法不会报错,但是结果可能会不对;在[[]]中也可使用包含-gt和-lt的符号,不建议使用;比较符号两端也要有空格。

 逻辑操作符

[]中使用的逻辑操作符

test、[[]]和(())中使用的逻辑操作符

说明

-a

&&

and,与,两端都为真,则结果为真

-o

||

or,或,两端有一个为真,则结果为真

not,非,两端相反,则结果为真

练习如下 

 

 实验1:通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。

代码如下

read -p "please input a number: " num
[   $num -eq 1 ]  &&  {
 echo 1
 exit 1
}
[[ $num == 2 ]] && {
 echo 2
 exit 2
}

test $num -ne 1 && test $num -ne 2 && {
 echo "input incorrect"
 exit 3
}

 

 运行结果 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值