-
2021-01-15 18:34:02
在shell中有时候会用到对数字进行判断的场景,尤其在写脚本判断参数的时候,以下有几个命令需要记住
- 大于 -gt (greater than)
- 小于 -lt (less than)
- 大于或等于 -ge (greater than or equal)
- 小于或等于 -le (less than or equal)
- 不相等 -ne (not equal)
- 相等 -eq (equal)
示例
echo $# #参数要大于2个 否则退出,这个用于参数判断 if [ $# -gt 2 ] then echo "missing argument(s)" exit 1 fi
更多相关内容 -
vue中v-if不等于格式
2021-09-26 11:54:08 -
if判断语句
2021-03-17 11:15:53在Python中,if语句让你能够检查程序的当前状态,并据此采取相应的措施。事例:language =['java','c#','python',]for i in language:#遍历所有的元素if i == 'java':#当元素值是java时 大写print(i.upper())else:...编程时,需要检查一系列条件,并根据决定采取什么措施。在Python中,if语句让你能够检查程序的当前状态,并据此采取相应的措施。
事例:language =['java','c#','python',]
for i in language:#遍历所有的元素
if i == 'java':#当元素值是java时 大写
print(i.upper())
else:
print(i.title())#不是的大写首字母
条件测试
每一条if语句的核心都是一个值为True或False的表达式,这种表达式称为条件测试(条件判断)。python根据True或者False来决定是否执行if语句中的代码。如果条件判断为True,python就执行if语句后面的代码,如果为False,python就忽略这些代码。
检查是否相等
大多数条件判断都将一个变量的当前值同特定值进行比较,最简单的条件判断就是检查变量值是否相等。
例:age = 15
if age>=18:
print('您得年纪是{}岁,已经成年'.format(age))
else:
print('等几年吧')
条件判断可以使用的数学比较符号,大于、小于、等于、大于等于、小于等于以及不等于>、=、<=、!=
检查多个条件
使用and语句检查多个条件
检查两个条件是否都为True,可以使用关键字and将两个条件合二为一,如果两个都是True则通过,反之不通过。
例:age_1 = 21
age_2 = 43
if age_1>=18 and age_2>=18:
print('通过')
else:
print('不通过')
使用or语句检查多个条件
关键字or也可以检查多个条件,但是至少有一个通过,则条件通过。两个条件都为False才不通过。
例:age_1 = 21
age_2 = 13
if age_1>=18 or age_2>=18:
print('通过')
else:
print('不通过')
检查特定值是否在列表中
有时候需要判断特定值是否在列表中,可以使用in方法
例:heros = ('李白','孙尚香','后裔','白起')
print('李白' in heros)#输出结果为True 李白在列表中
检查特定值不在列表中
使用not in方法查看特定值不在列表中
例:heros = ['李白','孙尚香','后裔','白起']
print('伽罗' not in heros)
布尔表达式
随着了解的深入,将遇到术语布尔表达式,它是条件判断的别名,与条件表达式一致,布尔表达式的结果要么是True要么是False。
if语句
当我们了解条件判断后,可以开始编写if语句了。
简单的if语句
例:age = 19
if age >=19:#条件判断通过
print('你已经成年了')#执行内容
if else语句
当判断不通过时,我们需要另一种操作,这种情况下,Python提供了if else语句。适用于2中条件判断,总会执行其中一个判断。
例:age=17
if age>=18:
print('成年了')
else:
print('未成年')
if elif else语句
当我们需要进行2个以上的条件判断时,python提供了if elif else语句。python只执行其中的一个代码块,依次检查条件直到条件通过。通过后会执行条件内的代码,跳过其余的条件。
例:age = 17
if 18<=age<=65:
print("收费30元")
elif 4<=age<=17:
print('收费10元')
else:
print('收费15元')
测试多个条件
if elif else语句结构功能强大,但是仅适用于只有一个条件满足的情况,因为条件通过,剩下的条件直接跳过,这样的做法可以提高效率,但要注意,如果我们有一系列的条件需要执行(存在多个True的情况),我们应该使用if语句
例:seasonings = ['麻酱','辣椒']#顾客选择的口味只有麻酱和辣椒
if '麻酱' in seasonings:
print('加麻酱 ')
if '鸡蛋' in seasonings:#顾客加不加麻酱,不影响鸡蛋的存在
print('加鸡蛋')
if '辣椒' in seasonings:
print('加辣椒')
print('鸡蛋灌饼好了')
如果改为if elif语句seasonings = ['麻酱','辣椒']
if '麻酱' in seasonings:#加完麻酱,条件判断通过,就跳过了后面的条件
print('加麻酱 ')
elif '鸡蛋' in seasonings:
print('加鸡蛋')
elif '辣椒' in seasonings:
print('加辣椒')
print('鸡蛋灌饼好了')
使用if语句处理列表
通过结合使用if语句和列表,对列表中的特定的值做特殊处理。
检查特殊元素
例:heros = ['李白','孙尚香','后裔','白起']
for hero in heros:
if hero == "李白":#当遍历的值是李白是,李白被选中了
print("李白被选了")
else:
print('请选择英雄')
处理多个列表
有时候会出现多个列表进行处理
例:有一个英雄列表,一个射手列表,一个我喜欢的英雄列表heros = ['李白','孙尚香','后裔','鲁班']
hero_shooter = ['孙尚香','后裔','鲁班']
my_hero = []
for i in heros:#遍历英雄列表
if i in hero_shooter:#如果英雄是射手
my_hero.append(i)#添加到我的英雄列表中
else:print('我喜欢射手')
print(my_hero)
顶顶顶
-
Mybatis if判断Integer类型的值不等于''引发的问题(!=''等价于!=0)
2018-09-13 11:00:18类型属性,在判断不等于 '' 时,例如 age != '' , OGNL 会返回 '' 的长度,源码: (s.length() == 0) ? 0.0 : Double.parseDouble( s ) ,因此表达式 age != '' 被当做 age != 0 来判断,所以当 age 为 0 时, if ...案例
当传入的
person
属性age
的值为0
时,mybatis
预编译下面的语句会报错,因为预编译的sql
为:update person where id = 1
。<update id="update" parameterType="com.p7.demo.model.Person"> update person <set> <if test="age != ''"> age = #{age} </if> </set> where id = 1 </update>
为什么 if 条件判断没有通过?
通过源码了解到,
mybatis
在预编译sql
时,使用OGNL
表达式来解析if
标签,对于Integer
类型属性,在判断不等于''
时,例如age != ''
,OGNL
会返回''
的长度,源码:(s.length() == 0) ? 0.0 : Double.parseDouble( s )
,因此表达式age != ''
被当做age != 0
来判断,所以当age
为0
时,if
条件判断不通过。总结
- 在设计实体类时,实体属性要使用基本数据类型的包装类型,因为基本数据类型有默认值
if
条件判断number
类型,没必要判断''
的情况,只需判断null
的情况,如果非要判断''
的情况,那么要考虑到等于0
的情况,即<if test="age != '' or age == 0">
源码分析
mybatis
调用OGNL
源码的入口:-
将
age != ''
表达式封装为ognl.Node
,ognl.Node
使用组合设计模式,Node
分为普通节点,常量节点等类型的节点 -
调用
Ognl
的getValue
静态方法,参数1:条件表达式封装的ognl.Node
,参数2:Person
对象(mybatis
传入的是一个Map
)
调试
OGNL
的代码:依赖:
<dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>2.6.9</version> </dependency>
代码:
public static void main(String[] args) throws Exception { String expression = "age != ''"; Node node = new OgnlParser(new StringReader(expression)).topLevelExpression(); Person person = new Person(); person.setAge(0); Object value = Ognl.getValue(node, person); System.out.println(value); }
-
条件表达式判断入口,
Ognl#getValue
方法 -
Ognl#getValue
重载方法,这个方法将参数tree
强转为Node
类型,它的实际类型是SimpleNode
,并调用SimpleNode#getValue
方法,SimpleNode
中有Node[] children
属性,OGNL
使用组合设计模式,将age != ''
分成ASTProperty
封装的age
属性节点和ASTConst
封装的''
常量节点,且age
属性节点的children
属性有一个ASTConst
常量节点,它value
是age
的属性名称。ASTConst
类型节点的children
一般情况下为null
,即此类节点一般没有子节点 -
SimpleNode#getValue
方法else
分支调用了evaluateGetValueBody
方法,此方法中调用ExpressionNode#isConstant
方法,判断SimpleNode
的children
是否全是常量节点(常量节点请参考SimleNode
的子类),这里hasContantValue
为false
,所以在执行return
的三目运算时,调用ASTNotEq#getValueBody
方法,因为我们的条件是不等于,所以我们应该查看ASTNotEq
中的方法。 -
ASTNotEq#getValueBody
方法,SimpleNode
中的children[0]
是age
属性节点,children[1]
是''
常量节点,这里分别获取节点的值。children[0]
是属性节点,调用getValue
方法,重复走第3步的操作,注意,此时调用的getValueBody
是ASTProperty
的方法,获取age
节点的常量节点,并从person
类中提取age
的值,而children[1]
是常量节点,因此走第3
步操作时,hasConstantValue
是true
,直接返回constantValue
,值为""
。然后调用OgnlOps#equal
方法,参数1:age
的实际值,参数2:与age
做判断的值''
-
OgnlOps#equal
方法,在第二个if
条件中,调用isEqual
方法,isEqual
最里层的else
中调用的compareWithConversion
方法,首先通过getNumericType
方法获取到参数的真实类型,再通过getNumericType
重载方法获取两个参数的最大类型(参见NumericTypes
接口)这里返回NONNUMERIC
,然后通过switch
分支处理,由于参数1和参数2不都为NONNUMERIC
,因此switch
分支走DOUBLE
的case
,分别获取两个参数的Double
值,对于参数2空字符串,在调用doubleValue
方法时,先去掉左右空格,再取字符串长度作为最后的值,与age
的值进行比较,即return (dv1 == dv2) ? 0 : ((dv1 < dv2) ? -1 : 1);
,dv1
和dv2
都是0
,然后回看result = (compareWithConversion(object1, object2, true) == 0) || object1.equals(object2);
返回true
,return OgnlOps.equal( v1, v2 )? Boolean.FALSE : Boolean.TRUE;
返回false
,最终<if test="age != ''">
返回false
,条件不成立
-
freemarker if判断字符串不等于空字符串
2019-07-26 17:16:26#if str!=""> 行不通 2,<#if str!=’’> 行不通 网上有说用字符串长度的 但是他的长度不是0 也不是1 ,是2,两个上引号,长度为2, 最后,确定方法 <#if str?length gt 2> 成功,如果有空格 可以用... -
MyBatis if判断条件为等于的问题
2019-04-02 21:33:11在用MyBatis操作数据库的时候相信很多人都用到,当在判断null, 大于,大于等于,小于,小于等于,不等于时估计很多都用到,比较容易实现了,这里就省略了,但唯独判断条件为等于时估计蛮多人遇到坑了, 俺在这个问题... -
C语言条件判断语句:if、else if、else
2021-05-25 05:56:551)简单介绍三种形式的条件判断语句:if、else if、elseif:if(表达式)执行语句if:判断表达式内容,如果为true(真),就执行语句else if:if(表达式)执行语句else if(表达式1)执行语句1......(很多的else if)else if... -
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选...
2021-11-17 17:46:40还有判断节点类型的过程,例子中用的的都是不等于类型的节点。下边的方法真正开始对表达式两侧的数值进行比较了。前半段的 viewId != null 不再贴出,只截图有问题的后半段: 进入最核心的方法比较方法 ... -
matlab的if语句运算符与或怎么用
2021-04-18 05:59:24matlab程序if语句用法MATLAB中我们常常用到条件判断语句结构,...end 结构,我们以如下内容进行判断: 运行以上语句,结果如下a1=1,a2=1,判断a1是否大于a2,显然不大于,然后就执行else语句,给a赋值为2; 3、if..e... -
在python中不等于用什么来表示
2020-12-29 07:43:02在python中不等于用什么来表示十分简单,并且应用十分广泛。在Python语言中,用 != 表示不等于。我们通过下面一个简单的例子来 理解:>>> x=3>>> y=4>>> if x !=y:print(x+y)else:print... -
mybatis if test 不为空字符串 且不为 null
2019-05-15 16:04:58在mybatis中, if test 判断不为空字串和null的时候,报了sql 语法错误 xml文件: <if test="keyword != null AND keyword != ''"> AND ( mac_id = #{keyword} ) OR ( user_id = #{keyword} ) </if> ... -
动态sql的if判断字符串是否等于某个值
2020-11-05 11:27:04坑——动态sql的if判断字符串是否等于某个值判断空和空值判断具体值 动态sql的if判断很常用,非常便捷方便,下面记录一个坑。 判断空和空值 一般情况下,动态sql的if判断字符串,我们的习惯是用来判断null和 ’ ',... -
python不等于运算符_Python不等于运算符
2020-07-10 11:14:52python不等于运算符Python not equal operator returns True if two variables are of same type and have different values, if the values are same then it returns False. 如果两个变量具有相同的类型并且具有... -
v-if 条件判断
2019-07-11 18:23:49v-if 里面的参数是个变量 。(别忽略了,因为不同场景用到的时候,会忘记) 今天在使用vue写分页的时候,页面是这样渲染的, <tr v-for="(item,key) in arr_province" v-if="key>=a && key<b... -
mybatis不等于判断无效
2019-11-27 10:38:19!=比较的是地址引用,所以在值为Object类型的情况下代码是有问题的。 所以代码应该这样写: <if test='name != "unselected".toString() '>and name = #{name}</if> ... -
bash if语句
2019-09-19 14:29:40= $string2 ] 如果string1不等于string2 if [ -n $string ] 如果string 非空(非0),返回0(true) if [ -z $string ] 如果string 为空 if [ $sting ] 如果string 非空,返回0 (和-n类似) if [ a = b... -
关于if 判断等于0 和‘0’的问题
2016-07-29 12:39:50小马虎导致大损失, 我们很多程序员可能对于0,null,空,false这几个的区别到底是什么可能不太明白,特别是在判断时会发现0,false都是没问题的,下面我们来看个实例。 例 代码如下复制代码 <?php $test=0;... -
thymleaf th:if判断某值不为空
2018-12-15 11:20:00div class="col-md-6" th:if="${not #strings.isEmpty(user.userName)}"> thymleaf模板还有很多好用的,点滴积累!ヾ(◍°∇°◍)ノ゙ 转载于:https://www.cnblogs.com/xuchao0506/p/101... -
批处理中判断字符串不等于写法
2020-07-22 15:33:17不等于用NEQ 例如:参数branch不等tags时,执行jenkins_build方法 if “%rows%” == “1” (if %branch% NEQ tags (goto jenkins_build) else (goto end)) else (goto end) 其中NEQ两边的值不能加双引号 -
微信小程序if不等判断无效
2018-12-22 12:24:44在小程序中需要进行undefiend判断,不等于undefiend时才能进行数据绑定。! 现在不管变量是不是undefined,都会执行if里的内容。 ... -
EXCEL中IF函数中怎么表达某一个单元格不等于空白则返回值1.4
2021-01-13 04:05:521、并列的应用场景,算出这些人是否合格,小于60不合格,大于60小于100是合格 2、多条件并列判断,我们要用得到以下函数,and()表示括号内的多个条件要同时成立;or()表示括号内的多个条件任一个...and函数或者*连接... -
shell 值判断,大于0,等于0,小于0,大于等于0,小于等于0,不等于0
2021-01-13 22:30:036、-ne:不等于,not equal。 连接符,如下: 1、-a:且,and。 2、-o:或,or。 条件判断,逻辑运算符,如下: 1、&&:用来执行条件成立后执行的命令。 2、||:用来执行条件不成立后的执行命令。 二、shell文句... -
mybatis中 if 标签 test 等于判断
2020-05-19 17:00:20在mybatis中不等于一般是 <if test="formNumber != null and formNumber != ''"> 我们想当然的要是需要判断等于的话,肯定就是用==呗,实际情况打脸啊,哈哈,发现直接改成 ==的话,if里面的内容始终都不进去... -
Nginx配置中的if判断
2020-01-13 17:15:14当rewrite的重写规则满足不了需求时,比如需要判断当文件不存在时、当路径包含xx时等条件,则需要用到if if语法 if (表达式) { ... } 表达式语法: 当表达式只是一个变量时,如果值为空或任何以0开头的字符串... -
微信小程序 wx:if 中的条件判断不能用“===”
2018-11-23 13:49:16在做微信小程序商城时,点击首页顶部导航条按钮来控制显示的内容,这是需要wx:if ,当在条件判断时,我延用了js的“=”,点击按钮切换时不起作用,后来发现只能用“” ... -
ABAP 不等于 大于等于 小于等于的几种写法
2020-04-14 09:04:44不等于:【NE】、【<>】、【><】; 大于等于:【GE】、【>=】、【=>】; 小于等于:【LE】、【<=】、【=>】。 小于:【LT】、【<】; 大于:【GT】、【>】; ... -
shell if 对字符串的判断
2021-03-23 14:23:03三、字符串判断 [ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真; [ -n STRING ] 如果...= STRING2 ] 如果字符串不相同则为真 ; [ STRING1 ] 如果字符串不为空则为真,与-n类似 ... -
转:mybatis if test 不为空字符串或null
2018-12-10 22:28:38&amp;lt;sql id=&quot;public_content&...if test=&quot;productId != null and productId !=''&quot; &amp;gt; and a.product_id = #{productId,jdbcType=VARCHAR} -
ibatis中if多条件查询以及sql中不等于,等于的用法
2018-03-13 09:58:102、sql中不等于写法,用<![CDATA[xx <> 3 ]]>这种写法例如字段xx不等于3:and <![CDATA[xx <> 3 ]]>3、当MyBatis 判断条件为等于的时候,常量需要... -
c:if标签判断不为空和其他的值判断
2018-05-23 10:26:51今天用<c:if test=""></c:if>标签时 &... 一直出不来 后来才发现 不同的类型有不同的判断 一,el表达式用法: 1.项目中添加 jstl.jar 和 standard.jar 两