【Linux】条件测试操作与流程控制语句

在编写Shell脚本时候,经常需要判断两个字符串是否相等,检查文件状态或者是数字的测试等。Shell提供了对字符串、文件、数值等内容的条件测试以及逻辑流程控制。

常用测试操作

test命令,测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值。

格式1
test 条件表达式
格式2
[ 条件表达式 ]       //常用格式,使用方括号时,要注意在条件两边加上空格。

常见测试类型:

  • 测试文件状态
  • 字符串的比较
  • 整数值的比较
  • 逻辑测试
测试文件
[ 操作符 文件或目录 ]

操作符:

-d:测试是否为目录,是则为真(Directory)
-e:测试目录或文件是否存在,存在则为真(Exist)
-f:测试是否为文件,是则为真(file)
-r:测试当前用户是否有权限读取,是则为真(read)
-w:测试当前用户是否有权限写入,是这为真(write)
-x:测试当前用户是否可执行该文件,可执行则为真(Excute)
-L:测试是否为符号链接文件,是则为真(Link)
-nt:file1 -nt file2 如果 file1 比 file2 新(修改时间),则为真
-ot:file1 -ot file2 如果 file1 比 file2 旧(修改时间),则为真

字符串比较
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]

操作符:

=:字符串内容相同则为真,就是说包含的文本一摸一样。
!=:字符串内容不同,则为真(!号表示相反的意思)
-z:字符串内容为空(长度为零)则为真
-n:字符串内容非空(长度非零)则为真
<:string1 < string2 如果string1在本地的字典序列中排在string2之前,则为真
>:string2 如果string1在本地的字典序列中排在string2之后,则为真

注意点:

  1. 字符串的 “等于” 比较,为了与POSIX一致,在[]中使用=,(尽管==也可以可以用的)
  2. 注意在=前后各有一个空格,如果没有空格就是赋值的关系,不是比较的关系。
  3. 字符串的> <比较运算符,一般放在[[ ]]之中,而不是test ("[]")
  4. 字符串的> <比较的结果,与本地的locale有关,是按照其字典序列进行比较的
整数值比较
[ 整数1 操作符 整数2 ]

操作符:

-eq:等于(equal)
-ne:不等于(not equal)
-gt:大于(Greater than)
-lt:小于(lesser than)
-le:小于等于(lesser or equal)
-ge:大于等于(Greater or equal)

逻辑测试
[ 表达式1 ] 操作符 [ 表达式2 ] ...

操作符:

-a 或 && :逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假
-o 或 || : 逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否为为假
! :逻辑否,当制定条件不成立时,返回结果为真

发布了352 篇原创文章 · 获赞 14 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105307784
今日推荐