shell里的条件测试和判断

条件测试:

判断某需求是否满足,需要由测试机制来实现;

如何编写测试表达式以实现所需的测试:

(1) 执行命令,并利用命令状态返回值来判断;

$?:命令状态返回值

0:成功

1-255:失败

(2) 测试表达式

test  EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]

注意:EXPRESSION两端必须有空白字符,否则为语法错误;

示例:

[[email protected] tmp]# touch a
[[email protected] tmp]# [ -f a ]
[[email protected] tmp]# echo $?
0
[[email protected] tmp]# [ -d a ]
[[email protected] tmp]# echo $?
1
[[email protected] tmp]# test -f a
[[email protected] tmp]# echo $?
0
[[email protected] tmp]# [[ -d $? ]]
[[email protected] tmp]# echo $?
1

bash的测试类型:

数值测试

字符串测试

文件测试

数值测试:数值比较

-eq:是否等于; [ $num1 -eq $num2 ]

-ne:是否不等于;

-gt:是否大于;

-ge:是否大于等于;

-lt:是否小于;

-le:是否小于等于;

字符串测试:

==:是否等于;

>:是否大于;

<:是否小于;

!=:是否不等于;

=~:左侧字符串是否能够被右侧的PATTERN所匹配;

-z "STRING":判断指定的字串是否为空;空则为真,不空则假;

-n "STRING":判断指定的字符串是否不空;不空则真,空则为假;

注意:

(1) 字符串要加引用;

(2) 要使用[[ ]];

文件测试

存在性测试

-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;

组合测试条件:

逻辑运算:

第一种方式:

COMMAND1 && COMMAND2

COMMAND1 || COMMAND2

! COMMAND

[ -O FILE ] && [ -r FILE ]

第二种方式:

EXPRESSION1  -a  EXPRESSION2

EXPRESSION1  -o  EXPRESSION2

! EXPRESSION

[ -O FILE -a -x FILE ]

练习:将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.localdomain,则将其设置为wlm;

[[email protected] tmp]# hostName=$(hostname)
[[email protected] tmp]# hostname
localhost
[[email protected] tmp]# echo $hostName 
localhost
[[email protected] tmp]# [ -z "$hostName" -o "$hostName" == "localhost" -o "$hostName" == "localhost.localdomain" ] && hostname wlm
[[email protected] tmp]# echo $?
0
[[email protected] tmp]# hostname
wlm
时间: 2024-11-07 21:51:20

shell里的条件测试和判断的相关文章

Shell脚本(条件测试&amp;IF判断)——理论篇2

Shell脚本理论篇2--条件测试&IF判断 条件测试 上一篇博客我们提到了预定义变量中有个$?变量用于判断命令是否执行成功.那么如何使用呢? 这时候就需要专门的测试工具--test命令,对特定条件进行测试,并使用$?对返回值进行判断,其命令形式如下: test 条件表达式 & [ 条件表达式 ] //更为常用 注意: 中括号"["和"]"与条件表达式之间均需要使用空格隔开,否则会出现错误!! 一.文件测试 格式: [ 操作符 文件或目录 ] 常用操

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

Shell学习之条件测试(四)

Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] -- 命令1 操作符 命令2 -- 常用的操作符 ( 注意:-a和-o放在[]里面用,&&和||放在[]外面用 ) -a 或 && 逻辑与 -o 或 || 逻辑或 ! 逻辑否 文件测试 文件测试 格式1: [ 操作符 文件或目录 ] 格式2:test 操作符 文件或目录 常用的测试操作符 -d :测试是否为目录( Directory ) -e

shell基础 变量 条件测试 判断结构

Top NSD ENGINEER DAY02 案例1:Shell脚本的编写及测试 案例2:重定向输出的应用 案例3:使用特殊变量 案例4:编写一个判断脚本 案例5:编写一个批量添加用户脚本 1 案例1:Shell脚本的编写及测试 1.1 问题 本例要求两个简单的Shell脚本程序,任务目标如下: 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello World!!” 编写一个能输出系统信息的 /root/sysinfo 脚本,执行后依次输出当前红帽系统的

Shell中的条件测试语句

Shell有条件测试语句,一般用test命令或是[]命令来完成,它们是条件判断语句if~then语句的基础,特别是[]命令.下面我们讲解一些条件测试语句. 1. test命令实现条件测试 对于检测系统中某些文件是否存在,或者相关属性时,test命令很好用. 其基本语法如下: test命令还可以测试字符串: test命令还可以测试整数之间的关系: 2. []命令来实现条件测试 使用中括号[]命令来实现条件测试功能时,要特别注意.因为中括号在很多地方都有用到,比如通配符和正则表达式.而在用[]表示条

shell学习之条件测试(参考shell脚本编程诀窍)

1关于test测试,查看man文档知 表达式的判断 ( EXPRESSION )                    #EXPRESSION is true ! EXPRESSION                      #EXPRESSION is false EXPRESSION1 -a EXPRESSION2        #both are true,-o means or 字符串是否为空,相等 -n STRING  #the length of STRING is nonzero

Shell中的条件测试和循环语句

条件测试 1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假, 则命令的Exit Status为1(注意与C语?言的逻辑表?示正好相反).例如测试两个数的大小关系: 虽然看起来很奇怪,但左方括号[确实是一个命令的名字,传给命令的各参数之间应该?空格隔开,比如,$VAR.-gt.3.]是[命令的四个参数,它们之间必须?空格隔开.命令test或[的参数形式是相同的,只不过test命令不需要]参数.以[命令为

shell编程之条件测试

条件测试 (一)概念:对特定的条件进行判断,以决定如何执行操作,当条件成立时,测试语句的返回值为0,否则为其他数值,意思就是如果 echo $? 的值是0,那么条件成立.条件测试的分类:文件测试.整数测试.字符串测试.逻辑测试. 测试方法: 方法1:test 条件表达式 方法2:[  条件表达式  ] (二)测试方法: 1.文件测试 格式1:  [  操作符 文件或目录  ] 格式2:test  操作符 文件或目录 常用的测试操作符 -d :测试是否为目录( Directory ) -e :测试

Shell脚本下条件测试(eq.ne.....)(转载)

转载:http://cxj632840815.blog.51cto.com/3511863/1168709 Shell编程中的条件测试 在Linux编程中经常会用到判断数值的大小,字符串是否为空这样或那样的条件测试语句 今天说说Linux中的常用的条件测试语句 1,判断两个数字的大小 -eq 相等或等于 -ne 不想等或不等于 -gt 第一个数大于第二个数 -lt 第一个数小于第二个数 -le 第一个数小于等于第二个数 -ge 第一个数大于等于第二个数 -z 空串 = 两个字符相等 != 两个字