Bash的条件表达式求值
Bash的条件控制允许两种类型:1)命令的成功或失败 2)逻辑表达式的真假
这两种类型都可以通过退出状态($?)来检验,$?=0为真,否则为假
一、命令的成功或失败
通过查看$?值
$echo $?
二、逻辑表达式求值
可以用test命令,[ ]、 [ [ ] ]
[ ]是test命令的变形
test命令和[ ]不能使用正则表达式,[ [ ] ] 可以使用正则表达式
1、字符串判断
$name=Tom
$friend=Jose
$test name != Tom
$echo $?
1
$[ $name = Tom ]
$echo $?
0
$[ $name == Tom -a "$friend" == "Jose" ]
$echo $?
1
$[ [ $name == [Tt]om ] ]
$echo $?
0
$[ [ $name == [Tt]om && $friend == "Jose" ] ]
$echo $?
0
if [ "$name" = "" ]
then
fi
注意:
1)第一个括号 [ 后面必须有空格,第二个括号 ] 前必须有空格,=、!=、==两边必须有空格
2)字符串比较时,可以使用一个或两个等号,因此,=也可换成==
3)[ ]中逻辑操作用-a,-o; [ [ ] ] 中逻辑操作用&&,||
4)和空字符串比较,注意变量也要加上双引号;如果不是和空字符串比较,则变量不用加双引号
2、整数判断
用test, [ ], [ [ ] ]
还可以用(( )),更方便,可以直接用比较运算符,变量前不用加$
$x=5
$y=20
$test $x -gt $y
$echo $?
1
$[ $x -gt $y ]
$echo $?
1
$[ [ $x -gt $y ] ]
$echo $?
1
$((x>y))
$echo $?
1
$((x>5 && y==20))
$echo $?
1
三、小结
1、字符串和整数:test、[ ]、[ [ ] ] 既可以用于字符串的比较,也能用于整数的比较;而(( ))仅能用于整数的比较
2、正则表达式:test、[ ]不能使用正则表达式; [ [ ] ]可以使用正则表达式
3、逻辑操作符:test、[ ]使用-a, -o逻辑操作符;[ [ ] ] 、(( ))使用&&、||逻辑操作符
4、空格:test、[ ]、[ [ ] ] 中比较操作符前后、[和以及]和之前必须有空格;(( ))没有要求
5、建议:字符串比较用[ [ ] ] 、整数比较用(( ))
=-=-=-=-=
Powered by Blogilo
Bash的条件表达式求值的更多相关文章
- 用Python3实现表达式求值
一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
- C/C++ 语言中的表达式求值(原文作者:裘宗燕)
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...
- Aviator 表达式求值引擎开源框架
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...
- 随手练——HDU 1237 表达式求值(输入格式典型)
坑了老子半天,结果是 float 范围不够!!! 基本思想: 开一个符号栈,一个数字栈: 碰到数字就入栈,碰到符号就与栈顶符号进行对比,如果当前符号优先级小于栈顶符号,数字栈弹出两个数进行栈顶符号运算 ...
- ZT C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]
http://bbs.csdn.net/topics/370153775 [置顶] [推荐] C,C++表达式求值顺序 裘老的解释. [问题点数:300分] 最近这问题有从日经变时经的趋势,这里贴出裘 ...
- C/C++ 语言中的表达式求值
在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...
- NYOJ35 表达式求值
表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式 ...
- C/C++表达式求值问题
转载:https://originlee.com/2016/05/01/eval-expression-in-c-and-cpp/ 前几日,一个刚学编程的老朋友问了我一个问题: int i = 0;i ...
- 表达式求值(noip2015等价表达式)
题目大意 给一个含字母a的表达式,求n个选项中表达式跟一开始那个等价的有哪些 做法 模拟一个多项式显然难以实现那么我们高兴的找一些素数代入表达式,再随便找一个素数做模表达式求值优先级表 - ( ) + ...
随机推荐
- Golang 在mac上用VSCode开发、Delve调试
本文包含以下内容: 1.安装VSCode: 2.用Delve调试Go项目: 3.自定义代码片段: 1.安装VSCode 先去下载VSCode,这个链接里面也有官方文档. 安装插件: vscode-ic ...
- 手把手教做单点登录(SSO)系列之一:概述与示例
本系列将由浅入深的结合示例.源码以及演示视频,手把手的带大家深入最新的单点登录SSO方案选型与架构开发实战.文末附5个满足不同单点登录场景的gif动画演示(如果看不清请在图片上右键用新窗口打开),本系 ...
- ThinkPHP 框架模型
1 在MainController.class.php 控制器中有一个test的方法,同时还有一个deng的方法,我想在test方法中使用deng方法 表示为 <?php namespace ...
- 让div自适应浏览器窗口居中显示
今天做 banner 时发现一个问题,就是浏览器窗口水平拉伸时 banner 图未能居中,所以网上找了些资料,自己写了个小 demo html代码: <div class="div1& ...
- java.util.zip.ZipException: invalid LOC header (bad signature)
Debug on Server(Tomcat 9) 遇到这个exception: SEVERE: A child container failed during startjava.util.conc ...
- 如何在R中导入不同类型的数据
这个表格是我在datacamp学习R导入文件的课程的归纳 遇到的问题及解决方法(环境: Rv3.2.5,win7,32位) 1. 使用gdata中的read.xls时提示找不到Perl路径 >l ...
- 面向切面编程(Aop)
AOP中的概念 AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程 ...
- Java内存模型四
volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个 ...
- C#RichTextBox种跳转到指定行
用这个方法,iCodeRowsID是要跳转的行号,rtb是RiCHTextBox控件名. 其中rtb.Lines.Length可获得最大行数 private void TrunRowsId(int i ...
- deepin/ubuntu下搭建Jekyll环境
title: deepin/ubuntu下搭建Jekyll环境 最近用github搭建了个博客,正好也学习一下markdown语法,由于markdown写完后不是立即可见,所以每次写完文章都要经过在线 ...