shell 脚本编程之比较运算符
2017-08-01 18:56
176 查看
测试
测试是用于判断某个条件是否成立,比如测试某个文件是否存在,测试两个字符串是否相等。要特别注意的是,shell 中返回 0 代表测试成功;条件语句、循环语句等结构经常会以“真假”为判断条件,shell 用字符串 true 来表示真,但对于测试来说返回 0 才表示真。这里可能有点绕,其实不用太在意 0 或者非 0 ,只需要知道以 “真” “假” 作为判断条件即可。测试有两种结构,1. test expression
2. [ expression ] 或 [[ expression ]]
第二种结构 expression 和中括号之间要有空格,两对中括号和一对中括号的区别是两对中括号能够处理特殊字符,而一对中括号里的特殊字符要加上转义字符来处理。
文件操作运算符
文件操作运算符用于文件测试,包括文件运算符 | 说明 |
---|---|
-e | 文件存在时返回真 |
-b | 文件存在且是块文件时返回真 |
-c | 文件存在且是字符文件时返回真 |
-d | 文件存在且是目录时返回真 |
-f | 文件存在且是普通文件时返回真 |
-x | 文件存在且是可执行文件时返回真 |
-p | 文件存在且为管道文件时返回真 |
-l | 文件存在且为链接文件时返回真 |
-S | 文件存在且为 socket 文件时返回真 |
-w | 文件存在且可写时返回真 |
-r | 文件存在且可读时返回真 |
-s | 文件存在且大小不为 0 时返回真 |
F1 -nt F2 | F1 比 F2 新时返回真 |
F1 -ot F2 | F1 比 F2 旧时返回真 |
#learn_file_compare.sh #!/bin/bash if ! test -e file; then echo "file no exits!" touch file fi if ! [ -d dir ]; then echo "dir no exits!" mkdir dir fi [ -x file ] echo $? [ -f file ] echo $? [ -r file ] echo $? [ -w file ] echo $? if [ ! -e file2 ]; then touch file2 fi [ file -nt file2 ] echo $? [ file -ot file2 ] echo $?
执行结果
file no exits! dir no exits! 1 0 0 0 1 0
返回 0 表示测试成功,返回非 0 表示测试失败,if 条件为 0 时成立。第一个测试判断文件 file 是否存在,如果不存在则返回非 0,取非之后就是 0;if 条件为 0 时表示真,则执行 if 逻辑,创建文件 file。第二测试判断目录 dir 是否存在,不存在返回非 0,取非之后就是 0,执行 if 逻辑,创建目录。file 是普通的可读可写文件,不是可执行文件,所以接下来的输出是 1 0 0 0。file2 创建时间比 file 晚,所以 file -nt file2 返回 1,file -ot file2 返回 0。
字符串比较运算符
字符串比较运算符用于字符串测试,主要有字符串大小比较,是否为空等测试字符串运算符 | 说明 |
---|---|
-z | 字符串为空时返回真 |
-n | 字符串不为空时返回真 |
= | 两个字符串相等时返回真 |
!= | 两个字符串不等时返回真 |
> | 第一个字符串大于第二个字符串时返回真 |
\< | 第一个字符串小于第二个字符串时返回真 |
#learn_string_compare.sh #!/bin/bash str1="" str2="hello" test -n "$str1" echo $? test -z "$str1" echo $? [ "$str1" = "$str2" ] echo $? str1="hellp" [ "$str1" > "$str2" ] echo $? [ "$str1" < "$str2" ] echo $? [ "$str1" \> "$str2" ] echo $? [ "$str1" \< "$str2" ] echo $? [[ "$str1" > "$str2" ]] echo $? [[ "$str1" < "$str2" ]] echo $?
执行结果
1 0 1 0 0 0 1 0 1
str1 和 str2 必须加上 符号,否则就变量字符串"str1"和"str2"了,而不是变量str1和str2的值了;另外,str1 外面的引号也是必须的。看最后的六个输出,一对中括号的情况下,< 和 > 不加转义字符也不会出错,但其执行结果是错误的,可以看到
str1>str2和
str1<str2都返回了真;正确的写法是后面的两种,一对中括号加上转义字符或者两对中括号。
整数比较运算符
整数比较运算符用于整数测试,判断两个整数的大小关系整数运算符 | 说明 |
---|---|
-eq | 两个数相等时返回真 |
-ne | 两个数不相等时返回真 |
-gt | 第一个数大于第二个数时返回真 |
-ge | 第一个数大于等于第二个数时返回真 |
-lt | 第一个数小于第二个数时返回真 |
-le | 第一个数小于等于第二个数时返回真 |
#learn_int_compare.sh #!/bin/bash num1=100 num2=99 [ $num1 -eq $num2 ] echo $? [ $num1 -ne $num2 ] echo $? [ $num1 -gt $num2 ] echo $? [ $num1 -lt $num2 ] echo $? num2=$num1 [ $num1 -eq $num2 ] echo $? [ $num1 -ne $num2 ] echo $? [ $num1 -ge $num2 ] echo $? [ $num1 -le $num2 ] echo $?
执行结果
1 0 0 1 0 1 0 0
相关文章推荐
- Shell脚本编程快速上手
- Shell脚本编程30分钟入门
- linux编程-----shell脚本
- shell脚本编程之循环语句
- Linux脚本(shell)编程(六) 循环
- Shell脚本编程实战之:Web页面更新脚本
- shell脚本编程之getopts的使用
- shell脚本编程 逐行处理文本 将字符串转化为数组
- Linux--shell脚本编程之符号篇
- shell脚本编程-例子_服务器存活监控
- shell脚本的一些编程
- 什么是shell脚本编程?
- 8.11_Linux之bash shell脚本编程入门篇(一)
- Shell脚本编程知识点总结及范例
- Shell脚本编程之--硬盘分区管理
- shell脚本编程总结
- Shell脚本编程的常识
- Shell脚本编程概述(四):bash内置字符处理工具
- 5个shell脚本编程入门练习示例
- Shell脚本编程——数组(array)