shell条件测试

    写脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试。基于这些测试才能做进一步动作。
1、文件测试
测试文件状态的操作符如下:
-d 目录    -s 文件长度大于0、非空
-f 正规文件 -w 可写
-L 符号连接 -u 文件有suid位设置
-r 可读    -x 可执行
测试时使用逻辑操作符
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
下面比较两个文件:

[root@localhost ~]# ls -l results.txt scores.txt       
-rwxr-xr-x 1 root root 0 Nov 21 12:22 results.txt
-rw-r--r-- 1 root root 0 Nov 21 12:15 scores.txt
下面的例子测试两个文件是否均可读。
  1. [root@localhost ~]# [ -w results.txt -a -w scores.txt ]
  2. [root@localhost ~]# echo $?
  3. 0
结果为真。
2、字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
字符串测试的操作符有三种。
== 两个字符串相等
!= 两个字符串不等
-z 字符串为空
-n 非空字符串
3、测试数值
测试数值可以使用许多操作符,可以是:

 -eq 数值相等     
 -ne 数值不相等    
 -gt 第一个数大于第二个数
-lt 第一个数小于第二个数        
-le 第一个数小于等于第二个数        
-ge 第一个数大于等于第二个数
下面的例子返回结果都一样。均为测试两个数是否相等(130是否等于130)。
  1. [root@localhost ~]# NUMBER=130
  2. [root@localhost ~]# [ "$NUMBER" -eq "130" ]
  3. [root@localhost ~]# echo $?
  4. 0
结果果然正确。
可以不必将整数值放入变量,直接用数字比较即可,但要加引号。
  1. [root@localhost ~]# [ "990" -le "995" ]
  2. [root@localhost ~]# echo $?
  3. 0
可以用逻辑操作符将两个测试表达式结合起来。仅需要用到一对方括号,而不能用两个,否则将返回错误信息“ too many arguments”。
  1. [root@localhost ~]# [ "990" -le "995" ] -a [ "123"  -gt "33" ]
  2. -bash: [: too many arguments
下面例子测试两个表达式,如果都为真,结果为真,正确使用方式应为:
  1. [root@localhost ~]# [ "990" -le "995" -a "123"  -gt "33" ]      
  2. [root@localhost ~]# echo $?
  3. 0

4、test、[] 、[[]]、(())的异同

[[ 是 bash 程序语言的关键字,而其他是内建命令!

$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin
    绝大多数情况下,这个三个功能通用。但是命令和关键字总是有区别的。命令和 关键字的差别有多大呢?
    如果是命令,它把参数作为比较表达式或文件测试,并且根据比较结果,返回一个退出码。那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。关键字把整个表达式看作一个单独的元素,并且返回一个退出码。[[]]结构比[]更灵活,是一个扩展的test命令。
    (())可以应用于算术表达式的运算,并将结果作为退出码。 如果表达式结果为0,则返回1作为退出码,否则返回0作为退出码。

参考:

http://jianlee.ylinux.org/Computer/Shell/shell_test.html

http://bbs.chinaunix.net/thread-1820304-1-1.html

《Advanced Bash-Scripting Guide》


转载请注明原载地址:http://blog.csdn.net/xinhanggebuguake

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值