Shell脚本中经常需要判断某情况或者数据是否满足,需要由测试机制来实现。

测试方式

  • echo $?查看命令执行状态返回值

    bash脚本中可以自定义返回值exit n(n为自己指定的状态码),shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束;
0:成功
1-255:失败
  • 测试表达式
# EXPRESSION两端必须有空白字符,否则为语法错误;
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

测试类型

  • 数值测试
-eq:是否等于; [ $num1 -eq $num2 ]
-ne:是否不等于;
-gt:是否大于;
-ge:是否大于等于;
=-lt:是否小于;
=-le:是否小于等于;

示例

# 测试2等于3
[root@VM_41_201_centos sh]# test 2 -eq 3
[root@VM_41_201_centos sh]# echo $?
1
# 测试2不等于3
[root@VM_41_201_centos sh]# test 2 -ne 3
[root@VM_41_201_centos sh]# echo $?
0
# a=2,b=1,测试a大于b
[root@VM_41_201_centos sh]# a=2
[root@VM_41_201_centos sh]# b=1
[root@VM_41_201_centos sh]# [ $a -gt $b ]
[root@VM_41_201_centos sh]# echo $?
0
  • 字符串测试
# 注意:(1) 字符串要加引用;(2) 要使用[[ ]];
==:是否等于;
>:是否大于;
<:是否小于;
!=:是否不等于;
=~:左侧字符串是否能够被右侧的PATTERN所匹配;
-z "STRING":判断指定的字串是否为空;空则为真,不空则假;
-n "STRING":判断指定的字符串是否不空;不空则真,空则为假;

示例

# 测试“a”等于“b”
[root@VM_41_201_centos sh]# [[ "a" == "b" ]]
[root@VM_41_201_centos sh]# echo $?
1
# 测试“abc123”匹配模式a*
[root@VM_41_201_centos sh]# [[ "abc123" =~ a* ]]
[root@VM_41_201_centos sh]# echo $?
0
# 测试变量test是否为空
[root@VM_41_201_centos sh]# [[ -z $test ]]
[root@VM_41_201_centos sh]# echo $?
0
  • 文件测试
# 存在性测试
-a FILE
-e FILE
# 存在性及类型测试
-b FILE:是否存在并且为 块设备 文件;
-c FILE:是否存在并且为 字符设备 文件;
-d FILE:是否存在并且为 目录文件;
-f FILE:是否存在并且为 普通文件;
-h FILE或 -L FILE:是否存在并且为 符号链接文件;
-p FILE:是否存在且为 命名管道文件;
-S FILE:是否存在且为 套接字文件;
# 文件权限测试
-r FILE:是否存在并且 对当前用户可读;
-w FILE:是否存在并且 对当前用户可写;
-x FILE:是否存在并且 对当前用户可执行;
# 特殊权限测试
-u FILE:是否存在并且 拥有suid权限;
-g FILE:是否存在并且 拥有sgid权限;
-k FILE:是否存在并且 拥有sticky权限;
# 文件是否有内容
-s FILE:是否有内容;
# 时间戳
-N FILE:文件自从上一次读操作后是否被修改过;
# 从属关系测试
-O FILE:当前用户是否为文件的属主;
-G FILE:当前用户是否属于文件的属组;
# 双目测试
FILE1 -ef FILE2:FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接;
FILE1 -nt FILE2:FILE1是否新于FILE2;
FILE1 -ot FILE2:FILE1是否旧于FILE2;

组合测试

bash脚本中支持讲多个测试条件组合,一般为逻辑与、或、非等。

组合测试的两种方式:

# 1.&&、||、!
COMMAND1 && COMMAND2
COMMAND1 || COMMAND2
! COMMAND
如:[ -O FILE ] && [ -r FILE ]
# 2.-a、-o
EXPRESSION1 -a EXPRESSION2
EXPRESSION1 -o EXPRESSION2
! EXPRESSION
如:[ -O FILE -a -x FILE ]

bash编程-条件测试的更多相关文章

  1. bash之条件测试if/else

    bash之条件测试:     if/then结构         条件测试(CONDITION):         test EXPRESSION:测试条件表达式正确否         [ EXPRE ...

  2. bash Shell条件测试

    3种测试命令: test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]  注意:EXPRESSION前后必须有空白字符 bash的测试类型 数值测试: -eq: ...

  3. Shell编程-条件测试 | 基础篇

    什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...

  4. linux基础09-bash编程(条件测试和特殊变量)

    (1)整数测试 INT1=63 INT2=77 [ $INT1 -eq $INI2 ] [[ $INT1 -eq $INT2 ]] test $INT1 -eq $INT2 文件测试: -e FILE ...

  5. shell编程:条件测试与比较(六)

    条件测试方法综述 test条件测试的简单语法及测试 范例6-1 测试文件(在test命令中使用-f选项:文件存在且为不同文件则表达式成立) [root@adminset ~]# test -f fil ...

  6. linux bash编程之算数运算和测试类型(第二篇)

    写在最前边:在bash中数据类型有两种,分别是数值型和字符型.其中字符型是默认的. 1.算数运算 · 运算符 · 语法 1.1.运算符:+.-.*./.%.** 注意:有些时候 *(乘号)需要转义 1 ...

  7. SHELL脚本编程的条件测试

    SHELL脚本编程的条件测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.条件测试概述 判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过 ...

  8. Shell编程-05-Shell中条件测试与比较

    目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试     在Shell脚本中各种条件结构和流 ...

  9. linux shell编程(二) 条件测试

    bash中常用的条件测试有三种 条件测试的表达式:[ expression ]  [[ expression]] 第一种:整数测试: -eq 测试两个整数是否相等,比如[ $A -eq $B ] -n ...

随机推荐

  1. python 一些方法函数

    转Python学习笔记十一:列表(3)--列表的一些方法:http://www.cnblogs.com/dabiao/archive/2010/03/12/1683942.html python中的e ...

  2. leetcode238

    public class Solution { public int[] ProductExceptSelf(int[] nums) { int[] result = new int[nums.Len ...

  3. TP5.1 钩子与行为应用

    什么是行为: 可以将行为理解为是一个行为类的方法,在框架中行为类.行为方法则是有一定的规则约定:而钩子则是这些行为方法被调用执行的位置点.注意了,要想执行某个钩子中的行为,那行为一定要在应用程序执行到 ...

  4. 移动端UL列表无法平滑向下滚动问题

    问题说明: 移动端向上滑动后,,列表无法自动滚动到底部~~而是类似屏幕"沾手"的效果(手离开屏幕直接停止在当前~列表不会自动向下滚动一段) 问题原因: 页面中存在如下代码: 当前页 ...

  5. BOUNDARIES AND SPACE

    BOUNDARIES AND SPACE Review Nice work! You've learned a lot. Let's review the web and CSS concepts c ...

  6. EOS踩坑记 2

    [EOS踩坑记 2] 1.--contracts-console 在开发模式下,需要将 nodeos 添加此选项. 2.Debug Method The main method used to deb ...

  7. mysql面试题集

    Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2. ...

  8. 169. Majority Element (Array)

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  9. Nginx(二)

    利用include功能优化nginx的配置文件 [root@lnmp conf]# cat nginx.conf worker_processes 1; events {     worker_con ...

  10. 100-days: seventeen

    Title: How 'Bohemian Rhapsody(波西米亚狂想曲)' ended up in 'Wayne's World(反斗智多星)' and became a phenomenon(现 ...