shell编程条件测试

关于条件测试命令可以使用man test命令查看

测试语句语法

  1. test 测试语句
  2. [ 测试语句 ]
  3. [[ 测试语句 ]]
  4. ((测试语句))

其中1和2除了语法不一样,功能基本是一样的,而第3种语法他可以使用通配符进行匹配,第四种语法除了用于整数的比较,更多的还是进行一些整数的运算,不过平时经常用到的还是第2、3种语法结构。

条件测试类型

  1. 文件测试
  2. 数值测试
  3. 字符串测试
  4. 逻辑测试

文件测试

格式:

  1. test 文件测试符 file
  2. [ 文件测试符 file ] #中括号的两边都需要有空格
  3. [[ 文件测试符 file ]] #中括号两边需要有空格

常用文件测试操作符:

  • -b: 文件是否存在,并且为块文件
  • -c:文件是否存在,并且为字符文件
  • -d: 文件是否存在,并且为一个目录(在linux下,万物皆为文件)
  • -e: 文件是否存在
  • -f: 文件是否存在,并且为普通文件
  • -s: 文件是否存在,并且文件大小大于零
  • -L: 文件是否存在,并且为链接文件
  • -r: 文件是否存在,并且文件可读
  • -w: 文件是否存在,并且文件可写
  • -x: 文件是否存在,并且文件可执行
  • file1 -nt file2 文件1是否比文件2新(文件新旧是按照文件修改时间来区分的)
  • file1 -ot file2 文件1是否比文件2旧

    实例:

[[email protected] ~]# touch wanger          #新建一个普通文件
[[email protected] ~]# test -f wanger && echo 0 || echo 1
0      #测试文件是否是普通文件,如果是输出0,否则输出1
[[email protected] ~]# [ -d wanger ] && echo 0 || echo 1
1      #测试文件是否是一个目录,如果是输出0,否则输出1

[[email protected] ~]# touch wangerxiao    创建一个普通文件wangerxiao
[[email protected] ~]# test wanger -nt wangerxiao && echo 0 || echo 1
1     #比较wanger是否比wangerxiao新,如果为真输出0,否则输出1
[[email protected] ~]# [ wanger -ot wangerxiao ] && echo 0 || echo 1
0     #比较wanger是否比wangerxiao旧,如果为真输出0,否则输出1

字符串测试:

格式:

  1. test 字符串测试符 string
  2. [ 字符串测试符 string ]
  3. [[ 字符串测试符 string ]]

常用字符串测试操作符:

  • -z string :字符串长度是否为0
  • -n string :字符串长度是否不为0
  • string1 = string2 :string1和string2是否相等
  • string1 != string2 :string1和string2是否不相等

实例:

[[email protected] ~]# name=wanger       #定义一个变量
[[email protected] ~]# [ -z $name ] && echo 0 || echo 1
1           #判断字符串是否为空,为空则返回0,否则返回1
[[email protected] ~]# test -n $name && echo 0 || echo 1
0   #判断字符串是否不为空,如果是则返回0,否则返回1
[[email protected] ~]# [ $name != "wanger" ] && echo 0 || echo 1
1           #判断变量是否不等于”wanger”,如果是返回0,否则返回1
[[email protected] ~]# test $name = "wanger" && echo 0 || echo 1
0   #判断变量是否等于”wanger”,如果是返回0,否则返回1

数值测试:

格式:

test num1 数值测试操作符 num2
[ num1 数值测试操作符 num2 ]
[[ num 数值测试操作符 num2 ]]
((num1数值测试操作符num2))

常用数值测试操作符:

  • num1 -eq num2 : 数字1是否等于数字2
  • num1 -ge num2 : 数字1是否大于等于数字2
  • num1 -gt num2 : 数字1是否大于数字2
  • num1 -le num2 : 数字1是否小于等于数字2
  • num1 -lt num2 : 数字1是否小于数字2
  • num1 -ne num2 : 数字1是否不等于数字2

注意:以上几种操作符不能用在(())格式中,在(())中应使用”< > = != >= <=”比较符号来进行数值的比较

实例:

[[email protected] ~]# test 6 -le 5 && echo 0 ||echo 1
0        #判断6是否小于等于5,如果是返回0,否则返回1
[2]+  Done                    test 64 -gt 63
[[email protected] ~]# [ 6 -gt 5 ]&& echo 0 || echo 1
0       #判断6是否大于5,如果大于返回0,否则返回1
[[email protected] ~]# [[ 6 = 5 ]]&& echo 0 || echo 1
1   #判断6是否等于5,如果等于返回0,否则返回1
[[email protected] ~]# ((5!=6))&&echo 0 ||echo 1
0   #判断5是否等于6,如果不等于返回0,等于则返回1

逻辑运算符:

  • -a : 相当于&&,表示逻辑与,两端条件都为真,结果为真
  • -o : 相当于||,表示逻辑或,两端条件只要有一个为真,结果就为真
  • !: 逻辑非,两端相反结果为真

实例:

test=”123”  #定义test变量
[[email protected] ~]# [ ! -z $test -o $test = "123" ] &&echo 0 || echo 1
0     #判断test变量是否不为空或者是否等于123,如果是返回0,在[]格式中只能使用-o和-a,而不能用&&和||
[[email protected] ~]# test -z $test && test $test = "123" &&echo 0 ||echo 1
1        #判断test变量是否为空并且test变量是否等于123,如果是返回0
[[email protected] ~]# [[ -z $test || $test = "123" ]] &&echo 0 ||echo 1
0        #判断test变量是否为空或者test变量是否等于123,如果是返回0


欢迎各位关注我的微信公众号“没有故事的陈师傅”

原文地址:https://blog.51cto.com/12970189/2416495

时间: 2024-08-28 20:34:38

shell编程条件测试的相关文章

shell编程---条件判断

一.shell编程之条件判断 1.整数测试 a.条件测试的表达式 [ expression ] [[ expression ]] test expression b.整数比较 -eq: 测试两个整数是否相等:比如 $A -eq $B -ne: 测试两个整数是否不等:不等,为真:相等,为假: -gt: 测试一个数是否大于另一个数:大于,为真:否则,为假: -lt: 测试一个数是否小于另一个数:小于,为真:否则,为假: -ge: 大于或等于 -le:小于或等于 c.命令的间逻辑关系 逻辑与: &&am

Shell编程——条件判断(2)

Shell编程之条件判断 条件测试操作 test命令 测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值 格式1:test 条件表达式 格式2:[ 条件表达式 ] 文件测试[ 操作符 文件或目录 ]常用的测试操作符-d:测试是否为目录-e:测试目录或文件是否存在-f:测试是否为文件-r:测试当前用户是否有权限读取-w:测试当前用户是否有权限写入-x:测试当前用户是否有权限执行整数值比较[ 整数1 操作符 整数2 ]常用的测试操作符-eq:等于-ne:不等于-gt:大于-

shell编程之测试,判断,循环

测试,判断,循环 条件测试:判断某需求是否满足,需要由测试机制来实现; 如何编写测试表达式以实现所需的测试;        (1)执行命令,并利用命令状态返回值来判断;$?:上一个命令的返回值0:成功1-255:失败    grep "^&" /etc/init.d/functions &> /dev/null    echo $?  返回0表示有空白行,测试成功;(2)测试表达式;测试方法一:    test expression        test 2&g

Shell 编程 条件语句

本篇主要写一些shell脚本条件语句的使用. 条件测试 test 条件表达式 [ 条件表达式 ] 文件测试 -d:测试是否为目录(Directory). -e:测试文件或目录是否存在(Exist). -f:测试是否为文件(File). -r:测试当前用户是否有权限读取(Read). -w:测试当前用户是否有权限写入(Write). -x:测试是否设置有可执行权限(Excute). -nt:判断文件A是否比文件B新. -ot:判断文件A是否比文件B旧. -ef:判断两个文件是否为同一个文件,用来判

shell中条件测试

bash脚本中条件测试类型:整数测试 字符串测试 文件测试 条件测试的表达式:[ expression ] [ [ expression ] ]表达式的前后必须有空格 整数测试:-eq:测试两整数是否相等,相等为真 -ne:测试两整数是否不等,不等为真 -ge:测试一个数是否大于或等于另一个数 -le:..............小于或等于....... -gt: ..............大于.......... -lt: ...............小于.......... bash中命

shell脚本条件测试与比较

1.条件测试常用语法 test 测试表达式 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 [ 测试表达式 ] 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试表达式之间至少有一个空格 [[ 测试表达式 ]] 通过[[ ]]双中括号进行条件测试表达式,[[ ]]双中括号与测试表达式之间至少有一个空格 ((测试表达式)) 通过(( ))双小括号进行条件测试表达式,( ))双小括号两端不需要空格,常用于整数对比 说明: 双中括号[[ ]]中可以使用通配符进行匹

shell编程 条件判断式----利用 case ..... esac 判断

条件判断式----利用 case ..... esac 判断 case  $变量名称 in   <==关键词为 case ,还有变量前有钱字号 "第一个变量内容")   <==每个变量内容建议用双引号括起来,关键词则为小括号 ) 程序段 ;;            <==每个类别结尾使用两个连续的分号来处理! "第二个变量内容") 程序段 ;; *)                  <==最后一个变量内容都会用 * 来代表所有其它值 不包含

shell编程 条件判断式----利用 if .... then ----多重

条件判断式----利用 if .... then ----多重 在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?举例来说,上面的 sh06.sh 脚本中,我们只要进行一次 $yn 的判断就好 (仅进行一次 if ),不想要作多次 if 的判断. 此时你就得要知道底下的语法了: # 一个条件判断,分成功进行与失败进行 (else) if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的指令工作内容: else 当条件判断式不成立时,可以进行的指令工作内容: fi

shell编程-条件判断式

条件判断式主要有以下6种类型: [[email protected] test]# ls -l total 8 drwxr-xr-x 2 root root 4096 Jan 17 19:28 shell -rw-r--r-- 1 root root 4 Jan 17 19:29 test.sh [[email protected] test]# [ -d test.sh ] && echo "yes" || echo "no" no [[email