Shell编程——条件测试(五)

在shell编程中,if语句本身不执行任何判断,它实际上接受一个程序作为参数,然后执行这个程序,并依据这个程序的返回值判断是否执行相应的语句。

程序的返回值是0,则为真,反之则为假

目录

·test命令(用于判断表达式的真假)

和test相同作用的方括号[ 也可以进行条件测试

·test和[命令可以对三类表达式进行测试

1、字符串比较

2、文件测试

 3、数字比较

·复合表达式(!、-a、-o)


·test命令(用于判断表达式的真假)

语法:

test expr

例子:

用test命令判断字符串变量password是否等于“123456”

test "password" = "123456"

 如果两者相等,test命令就返回值0,反之则返回1.

和test相同作用的方括号[ 也可以进行条件测试

语法:

[ expr ] #符号两边的空格不可以省略

示例: 

[ "password" = "123456" ]

所以 test "password" = "123456" 等同于 [ "password" = "123456" ]

注:空格在shell这个命令解释器中用于分隔命令和传递给它的参数,或者用于分隔命令的两个参数

·test和[命令可以对三类表达式进行测试

1、字符串比较

-z str当字符串str长度为0时,返回真
-n str当字符串str长度大于0时,返回真
str1 = str2当字符串str1长度和字符串str2长度相等时,返回真
str1 != str2当字符串str1长度和字符串str2长度不相等时,返回真

 

注:shell对大小写敏感

2、文件测试

用于文件测试的选项
-x pathname当pathname指定的文件或目录设置了执行权限时,返回真
-w pathname当pathname指定的文件或目录设置了权限时,返回真
-r pathname当pathname指定的文件或目录设置了权限时,返回真
-e pathname当pathname指定的文件或目录设置了存在时,返回真
-o pathname当pathname指定的文件或目录被当前进程拥有时,返回真
-d pathname当pathname是一个目录时,返回真
-s file当file存在且大小为0时,返回真
-f file当file是常规文件时,返回真;(不包括符号链接、目录、管道等)
-b file当file是块设备文件时,返回真
-c file当file是字符文件时,返回真
-h file当file是符号链接时,返回真
-p file当file是管道时,返回真

示例:

#! /bin/bash

if [ -x /home/fengyun/test.sh ]
then
	echo "the test.sh can be execute"
fi

 3、数字比较

test和[命令在数字比方面只能用来比较整数(包括负整数和整数)

语法:

test int1 option int2

#或者

[ int1 option int2 ]

用于数字比较的option
-eq(全拼:equal)相等为真
-ne(全拼:not equal)不相等为真
-lt(全拼:lower than)如果int1 小于 int2,则为真
-gt(全拼:greater than)如果int1 大于 int2,则为真
-le(全拼:lower or equal)如果int1 小于或等于 int2,则为真
-ge(全拼:greater  or equal)如果int1 大于或等于 int2,则为真

·复合表达式(!、-a、-o)

expr运算,当expr为假时返回真
expr1 -a expr2运算,同为真才返回真
expr1 -o expr2运算,有一个为真则返回真

 示例:如果用户输入的参数对应的文件存在,且/usr/bin/vi文件可执行,则执行相应的语句

#! /bin/bash

if [ -f $@ -a -x /usr/bin/vi ]
then cp $@ $@.bak
	vi $@
fi

补充:shell的条件操作“&&”和“||”可以用来代替test和[命令中的-a和-o;

上面的示例可以写成

#! /bin/bash

if [ -f $@ ] && [ -x /usr/bin/vi ]
then cp $@ $@.bak
	vi $@
fi

注:“&&”或者“||”连接的是两条[(或者test)命令,而-a、-o操作符是在同一条[( 或者test)命令中使用的

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼2333号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值