bash的测试和比较
来源:互联网 发布:电脑怎么下载淘宝 编辑:程序博客网 时间:2024/05/10 17:30
比较字串:[ "string1" = "string2" ] 等价于 [ "string1" == "string2" ]
比较整数:[ "num1" -eq "num2" ] 等价于 (( "num1" == "num2" ))
变量值不为空,且变量值中不包含空格的情况下,变量可不加双引号,当然加了双引号也可以
变量值为空或变量值中包含空格的情况下,变量一定要加双引号
或变量没有申明,比如unset var,引用$var,就一定要加双引号
所以把变量统一加上双引号是个明智的选择
[ <...> -a <...> ] 等价于 [ <...> ] && [ <...> ] 等价于 [[ <...> && <...> ]]
[ <...> -o <...> ] 等价于 [ <...> ] || [ <...> ] 等价于 [[ <...> || <...> ]]
Linux Shell 里面比较字符写法:
-eq
-ne
-gt
-lt
-le
-ge
-z
=
!=
-n
通过 <
[ian@pinguino ~]$ test "abc" = "def" ;echo $?1[ian@pinguino ~]$ [ "abc" != "def" ];echo $?0[ian@pinguino ~]$ [ "abc" \< "def" ];echo $?0[ian@pinguino ~]$ [ "abc" \> "def" ];echo $?1[ian@pinguino ~]$ [ "abc" \<"abc" ];echo $?1[ian@pinguino ~]$ [ "abc" \> "abc" ];echo $?1
关于[]中的= == 号两边一定要留空格的原因,用下例来说明:
#[ a=b ] && echo OK
OK
咦,为什么会打印出OK?bash会把a=b理解赋值操作,赋值操作永远为真
#[ a==b ] && OK
OK
同理a==b可以理解为a="=b"赋值操作
[root@liyao ~]# a=3
[root@liyao ~]# [ "$a" -eq 3 ] echo 1 || echo 0
-bash: [: missing `]'
0
[root@liyao ~]# [ "$a" -eq 3 ] && echo 1 || echo 0
1
[root@liyao ~]# (("$a" == 3)) && echo 1 || echo 0
1
[root@liyao ~]# [ "$a" -eq "3" ] && echo 1 || echo 0
1
设置变量为空值
A.
[root@liyao ~]# var=''
[root@liyao ~]# echo $var
B.
[root@liyao ~]# abc=""
[root@liyao ~]# echo $abc
C.
[root@liyao ~]# echo $bao
[root@liyao ~]# [ -n $var ] && echo OK
OK
# 这样才是正确的结果呀!
注意[ -n "" ]与[ -n " " ]是不一样的,[ -n " " ]为真," "是一个空格,它与空值不一样
let 命令也可以运行一个或多个算术表达式。它常常用来给算术变量赋值。
像 (( )) 一样复合命令 [[ ]] 允许你使用更自然的语法对文件或字符串进行测试。你也可以通过括号和逻辑操作符连接多个测试。
当使用 = 或 != 时 [[ 复合命令也可以针对字符串执行模式匹配操作,针对通配符的匹配如列表7所示。
列表7. 通过 [[ 做匹配tests [ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]*\ ?d* ]]; echo $?0[ian@pinguino ~]$ [[ "abc def c" == a[abc]*\ ?d* ]]; echo $?1[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* ]]; echo $?1
你甚至也可以通过 [[ 执行算术操作,但是请谨慎,只有是在 (( 复合命令中,< 和 > 操作符会把字符串作为操作对象测试其对应的次序前后。
- bash的测试和比较
- Bash 测试和比较函数
- Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- Linux 技巧: Bash 测试和比较函数
- shell 字符串编程--Bash测试和比较函数
- #!/usr/bin/env bash和#!/usr/bin/bash的比较
- 比较bash和perl的比较运算符(纠结)
- 比较bash和perl的比较运算符(纠结)
- 比较bash和perl的比较运算符
- bash的比较分类
- Bash的比较符号(注意整数比较和字符比较用不同的符号)
- bash条件测试及变量比较
- Bash比较常用的变量
- JavaScript 02
- 排序算法之快速排序
- JVM源码阅读-Dalvik类的加载
- OpenCV直方图(1)
- 线性布局综合案例
- bash的测试和比较
- 单例模式
- 【机器学习】支持向量机(SVM)浅讲
- 数据库设计的规范
- c++ 一个元素是string的vector容器
- IWBootStrapFrameWork在C++Builder XE10.1下的安装与试用
- java tomcat eclipse 环境变量配置
- 总结坑自己的一天——关于一个叫“安全狗”的软件
- 归并排序