200 ? "200px" : this.width)!important;}
-->

介绍

本篇文章主要是列举在shell命令中常出现的一些用来做比较的运算符,这些运算符是编写shell脚本的基础;

if else基本语法

1、基本语法:
if [ command ]; then
符合该条件执行的语句
fi
2、扩展语法:
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi

数值运算符

注意:数值运算符只是针对数值的比较,如果用来比较的是字符或者字符串则会返回报错“ integer expression expected”

  -eq 等于则为真,如果是对整数进行比较相当于“=”

  -ne 不等于则为真,如果是对整数进行比较相当于“!=”

  -gt 大于则为真,如果是对整数进行比较相当于“>”

  -ge 大于等于则为真,如果是对整数进行比较相当于“>=”

  -lt 小于则为真,如果是对整数进行比较相当于“<”

  -le 小于等于则为真,如果是对整数进行比较相当于“<=”

字符串比较符

=:字符串包含的文本是否一样

== 两个字符串是否相等

>:比较字母的大小,比如var1 > var2,如果var1字母大于var2则返回真

<:和大于相反

!= 两个字符串不相等

-z 空字符串

-n 非空字符串

注意:字符串的比较有时候有可能需要用双中括号“[[   ]]”,比如调用了命令进行比较,如果这个时候还是使用单中括号会报错,如下:

#!/bin/bash
var1="a";
var2="a"
if [[ `cat $var1` = `cat $var2` ]]
then
echo "eq"
else
echo "neq"
fi

cat命令应用的必须是个文件,不能直接引号内容。

文件运算符

文件/目录判断:

[ -a FILE ] :如果 FILE 存在则为真。

[ -b FILE ] :如果 FILE 存在且是一个块特殊文件则为真。

[ -c FILE ] :如果 FILE 存在且是一个字特殊文件则为真。

[ -d FILE ] :如果 FILE 存在且是一个目录则为真。

[ -e FILE ] :如果 FILE 存在则为真。

[ -f FILE ] :如果 FILE 存在且是一个普通文件则为真。

[ -g FILE ] :如果 FILE 存在且已经设置了SGID则为真。

[ -h FILE ] :如果 FILE 存在且是一个符号连接则为真。

[ -k FILE ] :如果 FILE 存在且已经设置了粘制位则为真。

[ -p FILE ] :如果 FILE 存在且是一个名字管道(F如果O)则为真。

[ -r FILE ] :如果 FILE 存在且是可读的则为真。

[ -o OPTIONNAME ] :如果 shell选项 “OPTIONNAME” 开启则为真。

[ -s FILE ] :如果 FILE 存在且大小不为o则为真。

[ -t FD ] :如果文件描述符 FD 打开且指向一个终端则为真。

[ -u FILE ] :如果 FILE 存在且设置了SUID (set user ID)则为真。

[ -w FILE ] :如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] :如果 FILE 存在且是可执行的则为真。

[ -z STRING ]: “STRING” 的长度为零则为真。

[ -O FILE ]:如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ]:如果 FILE 存在且属有效用户组则为真。

[ -L FILE ] :如果 FILE 存在且是一个符号连接则为真。

[ -n string ]:判断内容是否为空

[ -N FILE ]: 如果 FILE 存在 and has been mod如果ied since it was last read则为真。

[ -S FILE ] :如果 FILE 存在且是一个套接字则为真。

[ FILE1 -nt FILE2 ] :如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。

[ FILE1 -ot FILE2 ] :如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] :如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

建议也使用双中括号

字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ STRING1 ]  如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。

数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=

逻辑判断
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件

其他判断
[ -t FD ] 如果文件描述符 FD (默认值为1)打开且指向一个终端则返回为真
[ -o optionname ] 如果shell选项optionname开启则返回为真

IF高级特性:
双圆括号(( )):表示数学表达式
在判断命令中只允许在比较中进行简单的算术操作,而双圆括号提供更多的数学符号,而且在双圆括号里面的'>','<'号不需要转意。

双方括号[[ ]]:表示高级字符串处理函数
双方括号中判断命令使用标准的字符串比较,还可以使用匹配模式,从而定义与字符串相匹配的正则表达式。

可以用test命令检查某个条件是否成立,它可以进行数值、字符串和文件3个方面的测试,如果使用了test那么就不要使用[]将命令括起来,否则会返回报告如“too many arguments” 。

#!/bin/bash
var1="a"
var2="b"
var3="/data/test"
if test $var1 == $var2
then
echo "$var1=$var2"
else
echo "$var1!=$var2"
fi
echo "$var1,$var2" if test -x "$var3"
then
echo "可执行文件"
fi

逻辑判断符

-a:与操作,可以用&&代替

-0:或操作,可以用||代替

!:非操作

算术运算符

+

-

*

/


+=:例如var+=1等同于var=var+1

-=

*=

/= 

位操作符

注意:所有的这些运算符前后都要有空格否则就不是比较而是赋值操作。

总结

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

Linux 比较判断运算(if test)的更多相关文章

  1. Linux 比较判断运算(if else)

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要是列举在shell命令中常出现的一些用来做比较的运算符,这些运算符是 ...

  2. Linux Shell 数学运算

    Linux Shell 数学运算 在Linux中直接使用数学运算符进行数学运算往往得不到我们想要的计算结果.要在Shell中进行数学运算,我们需要借助点小手段.目前,Linux Shell中进行数学运 ...

  3. Linux C判断字符串是否为数字

    Title:Linux C判断字符串是否为数字  --2013-10-14 15:54 #include <ctype.h> #include <string.h> int I ...

  4. Linux C判断日期格式是否合法

    Title:Linux C判断日期格式是否合法 --2013-10-11 11:54 #include <string.h> // strlen() , strncpy() #includ ...

  5. Linux Shell 判断块设备节点是否存在

    /************************************************************************* * Linux Shell 判断块设备节点是否存在 ...

  6. Shell初学(六)Linux Shell 时间运算以及时间差计算方法

    Linux Shell 时间运算以及时间差计算方法 时间的加减,以及时间差的计算. 1. 时间加减 这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒. 如:1990-01 ...

  7. linux shell判断文件,目录是否存在或者具有权限

    在linux中判断文件,目录是否存在或则具有的权限,根据最近的学习以及网上的资料,进行了以下的总结: #!/bin/sh myPath="/var/log/httpd/" myFi ...

  8. linux中判断一个命令是否执行成功

    每一条基本命令执行后都有一个返回码,该返回码是用$?表示,执行成功的返回码是0,例如:if [ $? -ne 0 ];then 上一命令执行失败时的操作else 上一命令执行成功时的操作fi例如lin ...

  9. Linux下判断cpu物理个数、几核

    自己服务器的输出 1. 查看物理CPU的个数   #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l    1 2. 查 ...

随机推荐

  1. Sprint3(12.18)总结

    Sprint3第三阶段 1.类名:软件工程-第三阶段 2.时间:至12.18 3.选题内容:web版-餐厅到店点餐系统 4.团队博客地址: http://www.cnblogs.com/queenju ...

  2. AngularJS的小知识点

    小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...

  3. MySQL数据库sql语句的一些简单优化

    1.查询条件的先后顺序 有多个查询条件时,要把效率高能更精确筛选记录的条件放在后边.因为MySQL解析sql语句是从后往前的(不知是否准确). 例: select a.*,b.* from UsrIn ...

  4. 【Mail】JavaMail介绍及发送邮件(一)

    JavaMail介绍 JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP.POP3.IMAP,开发人员使用JavaMail ...

  5. C语言小练习一

    题目要求:国王将金币作为工资,发放给忠诚的骑士.第1天,骑士收到一枚金币:之后两天(第2天和第3天)里,每天收到两枚金币:之后三天(第4.5.6天)里,每天收到三枚金币:之后四天(第7.8.9.10天 ...

  6. DWG2SHP DXF2SHP 如何把AutoCAD的DWG,DXF文件转换为Esri ArcGIS的Shape文件

    dwg是AutoCAD创立的一种图纸保存格式,已经成为二维CAD的标准格式,很多其他CAD为了兼容AutoCAD,也直接使用dwg作为默认工作文件. 地图shape文件由ESRI开发,一个ESRI的s ...

  7. 为什么匿名内部类只能访问final变量【转】

    是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...

  8. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  9. Testng之使用@DataProvider注解做数据驱动【转】

    原文:http://www.jianshu.com/p/8e333a0ec42a 前两天学了一下@DataProvider,今天有时间总结一下.testng很强大,提供了很多注解,其中利用@DataP ...

  10. java基础2_算术运算

    一 算术运算符,包括+,-,*,/,%, 1. 如果在一个算术运算中有int,double,float那么最终运算的结果是double,那么也就是说参与运算的类型和得到的结果:结果一定是参与运算的精度 ...