Linux 比较判断运算(if else)

介绍

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

 

 

if else基本语法

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

数值运算符

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

  -eq 等于则为真,若是是对整数进行比较至关于“=”

  -ne 不等于则为真,若是是对整数进行比较至关于“!=”

  -gt 大于则为真,若是是对整数进行比较至关于“>”

  -ge 大于等于则为真,若是是对整数进行比较至关于“>=”

  -lt 小于则为真,若是是对整数进行比较至关于“<”

  -le 小于等于则为真,若是是对整数进行比较至关于“<=”express

 

字符串比较符bash

=:字符串包含的文本是否同样函数

== 两个字符串是否相等测试

>:比较字母的大小,好比var1 > var2,若是var1字母大于var2则返回真this

<:和大于相反spa

!= 两个字符串不相等code

-z 空字符串orm

-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

本站点全部随笔都是原创,欢迎你们转载;但转载时必须注明文章来源,且在文章开头明显处给明连接。

《欢迎交流讨论》

相关文章
相关标签/搜索