shell基础(7)测试:判断命令的执行过程,指导shell执行

测试是判断命令的执行过程,返回0则判断为真,返回非0则判断为假。

1. 测试语法结构

第一种结构,命令的格式如下:

test expression

expression是一个表达式,可以是算术比较、字符串比较、文本和文件属性比较等。
 

第二种结构,命令的格式如下

注意,左边的括号“[”后有个空格,右括号“]”前面也有个空格。

[ expression ]

 

2. 文件测试

“测试文件是否存在”就是“文件测试”的一种典型需求,其格式如下:

#文件测试方法一
test file_operator FILE
#文件测试方法二
[ file_operator FILE ]

其中file_operator是文件测试符(如下图),FILE是文件、目录(可以是文件或目录的全路径)。

在这里插入图片描述

判断文件是否存在

lianggao@bogon ~ % [ -e MyWorkSpace/001project/wcJava.zip ]
lianggao@bogon ~ % echo $?
0

 

判断文件是否可读、写、执行。

[root@tbds-10-1-0-38 log]# cat rxx.sh 
#!/bin/bash
#read命令用于从标准输入读取数值。-p:后面跟提示信息,即在输入前打印提示信息。
read -p "what file do you want to test" filename
if [ ! -e "$filename" ]; then
  echo "the file does not exits"
  exit 1
fi
 
if [  -r "$filename" ]; then
  echo "$filename can read"
fi
 
if [ -w "$filename" ]; then
  echo "$filename can write"
fi
 
if [ -x "$filename" ]; then
  echo "$filename can excute"
fi
[root@tbds-10-1-0-38 log]# bash rxx.sh 
what file do you want to test ./rxx.sh
./rxx.sh can read
./rxx.sh can write
[root@tbds-10-1-0-38 log]# bash rxx.sh 
what file do you want to test /11.txt
the file does not exits

 
 

3. 字符串测试

Shell中的字符串比较主要有等于、不等于、大于、小于、是否为空等测试。

字符串测试符
111121212121

[root@docp82 ~]# str1=""
[root@docp82 ~]# str2="hello"

[root@docp82 ~]# [ -z  "${str1}"  ]
[root@docp82 ~]# echo $?
0
[root@docp82 ~]# [ -z  "${str2}"  ]
[root@docp82 ~]# echo $?
1
[root@docp82 ~]# [   "${str2}" = "${str1}"  ]
[root@docp82 ~]# echo $?
1
[root@docp82 ~]# [   "${str2}" != "${str1}"  ]
[root@docp82 ~]# echo $?
0
//存在转义的情况
[root@docp82 ~]# [   "${str2}" > "${str1}"  ]
-bash: : No such file or directory
[root@docp82 ~]# [   "${str2}" \> "${str1}"  ]
[root@docp82 ~]# echo $?
0
[root@docp82 ~]# [   "${str2}" \< "${str1}"  ]
[root@docp82 ~]# echo $?
1
  1. 需要使用""接收${str1}的变量值
  2. 比较大小时,注意 > 和 < 都需要进行转义。

 

4. 整数测试

整数测试是一种简单的算术运算,作用在于比较两个整数的大小关系,测试成立则返回0,否则返回非0值。

#整数测试方法一
test "num1" num_operator "num2"
#整数测试方法二
[ "num1" num_operator "num2" ]

在这里插入图片描述

[root@docp82 ~]# num1=1
[root@docp82 ~]# num2=2
[root@docp82 ~]# [ "$num1" -gt  "$num2" ]
[root@docp82 ~]# echo $?
1
[root@docp82 ~]# [ "$num1" -lt  "$num2" ]
[root@docp82 ~]# echo $?
0
[root@docp82 ~]# [ "$num1" -eq  "$num2" ]
[root@docp82 ~]# echo $?
1
[root@docp82 ~]# [ "$num1" -ne  "$num2" ]
[root@docp82 ~]# echo $?
0

 

5. 逻辑测试符和逻辑运算符

逻辑测试符(不推荐)
在这里插入图片描述

逻辑运算符(推荐)
在这里插入图片描述
 

使用逻辑运算符去判断
[root@localhost ~]# ! [-e /var/log/messages ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [-e /var/log/messages ] && [-e /var/log/messages01 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [-e /var/log/messages ] || [-e /var/log/messages01 ]
[root@localhost ~]# echo $?0

不管是逻辑运算符还是逻辑测试符,在做逻辑与、逻辑或运算时逻辑都是一样的。

 

多逻辑运算符使用

将逻辑与、逻辑或的这些特点联合起来使用,使用的方式如下:

expression && DoWhenExpressionTrue || DoWhenExpressionFalse

从左到右,首先计算expression,并返回其值。如果返回真,继续执行&&后的代码DoWhenExpressionTrue,如果该语句执行成功,则expression &&DoWhenExpressionTrue整体返回0,使用||连接的DoWhenExpressionFalse代码将不会被执行;
 
如果expression返回假,则跳过DoWhenExpressionTrue,则用||连接的代码段DoWhenExpressionFalse一定会被执行。

上述代码段其实就是一个隐形的if-then-else语法。

 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

roman_日积跬步-终至千里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值