shell 比较
整数比较
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意: [[]]和[]中的行为在某些情况下是不同的:
[[ $a == z* ]] # 如果$a 以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] # 如果$a 等于z* (字符匹配),那么结果为true
[ $a == z* ] # File globbing 和word splitting 将会发生
[ "$a" == "z*" ] # 如果$a 等于z* (字符匹配),那么结果为true
File globbing 是一种关于文件的速记法,比如"*.c"就是,再如~也是.
但是file globbing 并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
(笔者不太懂, 假如在/tmp目录下有一个a.txt文件,则[ "a.txt" = a.* ]会返回逻辑真,但如果/tmp下有a.txt和a.out两个文件,则这样写Shell会报错)
!= 不等于,如:if [ "$a" != "$b" ]
注意:!= 在[[]]结构中使用模式匹配.
< 小于,在ASCII 字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII 字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义.
-z 字符串为空.就是长度为0.
-n 字符串不为空
注意: 对于字符串或数字的比较, 加上双引号("")是没有坏处的, 而且能避免一些不必要的麻烦(请参考,但模式和正则表达式不能加双引号.
混合比较
-a 逻辑与
exp1 -a exp2 如果exp1 和exp2 都为true 的话,这个表达式将返回true
-o 逻辑或
exp1 -o exp2 如果exp1 和exp2 中有一个为true 的话,那么这个表达式就返回true
但在[[]]使用&&和|| 代替-a 和-o, -o 和-a 一般都是搭配test 命令或者[]
看一些例子:
#!/bin/bash
# 数字和字符串比较
# 这里的变量a 和b 既可以当作整型也可以当作是字符串.
# 因为Bash 变量并不是强类型的.
a=
b=
# a,b作为整数进行比较
if [ "$a" -ne "$b" ]
then
echo "$a is not equal to $b"
echo "(arithmetic comparison)"
fi
echo
# a,b作为字符串进行比较
if [ "$a" != "$b" ]
then
echo "$a is not equal to $b."
echo "(string comparison)"
fi
# 在这个特定的例子中,"-ne"和"!="都可以.
exit
#!/bin/bash
# 测试字符串是否为null
# $string1 没被声明和初始化
if [ -n $string1 ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
# 错误的结果.
# 显示$string1 为非空,虽然他没被初始化.
echo
# 给$string1加上双引号再试一下.
if [ -n "$string1" ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
# 这次输出我们预期的结果
echo
if [ $string1 ] # 这次$string1 变成"裸体"的了,相当于[ -n $string1 ]
then
echo "String \"string1\" is not null."
else
echo "String \"string1\" is null."
fi
string1=initialized
if [ $string1 ] # 再来
then
echo "String \"string1\" is not null." else
echo "String \"string1\" is null." fi # 这次输出我们期望的结果 # 但最好还是给字符串加上双引号"", 因为这可以避免不必要的麻烦,也是一种好习惯
shell 比较的更多相关文章
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- shell简介
Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...
- Shell碎碎念
1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
随机推荐
- Truck History(kruskal+prime)
Truck History Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tota ...
- EnyimMemcached扩展 遍历功能
Memcached本身对外提供的命令不多,也就add.get.set.incr.decr.replace.delete.stats等几个,客户端对这些操作进行了封装,总体来说调用还是很简单的. 初看了 ...
- ftk学习记录(一个进度条文章)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 首先.在開始今天的文章之前.我们还是给朋友们展示一下前面一段代码的执行效果.效果例如以下, w ...
- Sequence one(hdu2610dfs+去重)
题目:有一个数列N,和一个数字k,输出该数列的前k个子序列,如果k大于N的所有子序列,输出所有符合要求的序列,序列要求不能是递减序列 比如: 3 5 1 3 2 的前五个序列为 1 3 2 1 3 1 ...
- css中关于transform、transition、animate的区别
写动画经常会用到这几个属性,他们之间有什么区别呢? 1.transform 每每演示transform属性的,看起来好像都是带动画.这使得小部分直觉化思维的人(包括我)认为transform属性是动画 ...
- (转载)log4net 组件详解
1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...
- Spring配置多数据源
如何在应用启动之后灵活切换数据源的关键点: 将SessionFactory接口中的dataSource配置为AbstractRoutingDataSource的instance,sessionFact ...
- [string]Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- data stage走起
如题,希望以后可以找到相应的工作.(已经工作3年以上了)
- LayoutInflater 与 inflate
Instantiates a layout XML file into itscorresponding View objects. LayoutInflater作用是将layout的xml布局文件实 ...