我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

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

shell基础(7)测试:判断命令的执行过程,指导shell执行 文章目录1. 测试语法结构2. 文件测试判断文件是否存在判断文件是否可读、写、执行。3. 字符串测试4. 整数测试5. 逻辑测试符和逻辑运算符使用逻辑运算符去判断多逻辑运算符使用测试是判断命令的执行过程返回0则判断为真返回非0则判断为假。1. 测试语法结构第一种结构命令的格式如下test expressionexpression是一个表达式可以是算术比较、字符串比较、文本和文件属性比较等。第二种结构命令的格式如下注意左边的括号“[”后有个空格右括号“]”前面也有个空格。[expression]2. 文件测试“测试文件是否存在”就是“文件测试”的一种典型需求其格式如下#文件测试方法一 test file_operator FILE #文件测试方法二[file_operator FILE]其中file_operator是文件测试符如下图FILE是文件、目录可以是文件或目录的全路径。判断文件是否存在lianggaobogon~%[-e MyWorkSpace/001project/wcJava.zip]lianggaobogon~%echo $?0判断文件是否可读、写、执行。[roottbds-10-1-0-38log]# cat rxx.sh #!/bin/bash#read命令用于从标准输入读取数值。-p:后面跟提示信息即在输入前打印提示信息。read-pwhat file do you want to testfilenameif[!-e$filename];then echothe file does not exitsexit1fiif[-r$filename];then echo$filename can readfiif[-w$filename];then echo$filename can writefiif[-x$filename];then echo$filename can excutefi[roottbds-10-1-0-38log]# bash rxx.sh what filedoyou want to test./rxx.sh./rxx.sh can read./rxx.sh can write[roottbds-10-1-0-38log]# bash rxx.sh what filedoyou want to test/11.txt the file doesnotexits3. 字符串测试Shell中的字符串比较主要有等于、不等于、大于、小于、是否为空等测试。字符串测试符[rootdocp82~]# str1[rootdocp82~]# str2hello[rootdocp82~]#[-z${str1}][rootdocp82~]# echo $?0[rootdocp82~]#[-z${str2}][rootdocp82~]# echo $?1[rootdocp82~]#[${str2}${str1}][rootdocp82~]# echo $?1[rootdocp82~]#[${str2}!${str1}][rootdocp82~]# echo $?0//存在转义的情况[rootdocp82~]#[${str2}${str1}]-bash::No such fileordirectory[rootdocp82~]#[${str2}\${str1}][rootdocp82~]# echo $?0[rootdocp82~]#[${str2}\${str1}][rootdocp82~]# echo $?1需要使用接收${str1}的变量值比较大小时注意 和 都需要进行转义。4. 整数测试整数测试是一种简单的算术运算作用在于比较两个整数的大小关系测试成立则返回0否则返回非0值。#整数测试方法一 testnum1num_operatornum2#整数测试方法二[num1num_operatornum2][rootdocp82~]# num11[rootdocp82~]# num22[rootdocp82~]#[$num1-gt$num2][rootdocp82~]# echo $?1[rootdocp82~]#[$num1-lt$num2][rootdocp82~]# echo $?0[rootdocp82~]#[$num1-eq$num2][rootdocp82~]# echo $?1[rootdocp82~]#[$num1-ne$num2][rootdocp82~]# echo $?05. 逻辑测试符和逻辑运算符逻辑测试符不推荐逻辑运算符推荐使用逻辑运算符去判断[rootlocalhost~]#![-e/var/log/messages][rootlocalhost~]# echo $?1[rootlocalhost~]#[-e/var/log/messages][-e/var/log/messages01][rootlocalhost~]# echo $?1[rootlocalhost~]#[-e/var/log/messages]||[-e/var/log/messages01][rootlocalhost~]# echo $?0不管是逻辑运算符还是逻辑测试符在做逻辑与、逻辑或运算时逻辑都是一样的。多逻辑运算符使用将逻辑与、逻辑或的这些特点联合起来使用使用的方式如下expressionDoWhenExpressionTrue||DoWhenExpressionFalse从左到右首先计算expression并返回其值。如果返回真继续执行后的代码DoWhenExpressionTrue如果该语句执行成功则expression DoWhenExpressionTrue整体返回0使用||连接的DoWhenExpressionFalse代码将不会被执行如果expression返回假则跳过DoWhenExpressionTrue则用||连接的代码段DoWhenExpressionFalse一定会被执行。上述代码段其实就是一个隐形的if-then-else语法。
返回列表