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

command(s)

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的条件表达式求值的更多相关文章

  1. 用Python3实现表达式求值

    一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...

  2. C/C++ 语言中的表达式求值(原文作者:裘宗燕)

    经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...

  3. Aviator 表达式求值引擎开源框架

    简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...

  4. 随手练——HDU 1237 表达式求值(输入格式典型)

    坑了老子半天,结果是 float 范围不够!!! 基本思想: 开一个符号栈,一个数字栈: 碰到数字就入栈,碰到符号就与栈顶符号进行对比,如果当前符号优先级小于栈顶符号,数字栈弹出两个数进行栈顶符号运算 ...

  5. ZT C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]

    http://bbs.csdn.net/topics/370153775 [置顶] [推荐] C,C++表达式求值顺序 裘老的解释. [问题点数:300分] 最近这问题有从日经变时经的趋势,这里贴出裘 ...

  6. C/C++ 语言中的表达式求值

    在此,首先向裘老师致敬! 裘宗燕:C/C++ 语言中的表达式求值 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?” m = 1; n = m+++m++; 最近有位不相识的朋友 ...

  7. NYOJ35 表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式 ...

  8. C/C++表达式求值问题

    转载:https://originlee.com/2016/05/01/eval-expression-in-c-and-cpp/ 前几日,一个刚学编程的老朋友问了我一个问题: int i = 0;i ...

  9. 表达式求值(noip2015等价表达式)

    题目大意 给一个含字母a的表达式,求n个选项中表达式跟一开始那个等价的有哪些 做法 模拟一个多项式显然难以实现那么我们高兴的找一些素数代入表达式,再随便找一个素数做模表达式求值优先级表 - ( ) + ...

随机推荐

  1. Display:table;妙用,使得左右元素高度相同

    我们在设计网页的时候,为了左右能够分明一点,我们经常会在左边元素弄一个border-right,但是出现一个问题,如果左边高度比较小,这根线就短了,下面空了一部分,反正如果在右边的元素弄一个borde ...

  2. Linux 上搭建 git 的服务器

    搭建服务器 假设服务器的名字是 git.example.com. 首先,添加一个叫做git的用户adduser git. 然后如果不存在的话, 为这个用户新建一个主目录mkdir /home/git, ...

  3. Python:学会创建并调用函数

    这是关于Python的第4篇文章,主要介绍下如何创建并调用函数. print():是打印放入对象的函数 len():是返回对象长度的函数 input():是让用户输入对象的函数 ... 简单来说,函数 ...

  4. 安卓模拟器tools修改

    defaults write com.apple.finder AppleShowAllFiles -bool true 这步是显示隐藏文件夹, 然后打开finder,在应用程序上右键,选择在上层文件 ...

  5. JS判断PC和移动端设备

    1.方法一 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...

  6. ssm框架整合+maven项目创建

    在引入外部maven插件后就可以创建一个maven项目了,这篇文章主要介绍ssm框架的整合和如何创建一个maven项目 1.在开发工具的项目空白区单击右键,依次选择New.Other,会出现如下界面, ...

  7. Linux文件属性及如何修改文件属性

    ls -al:显示文件的文件名与相关属性并列出所有文件详细的权限与属性 dr-xr-x---.   7       root     root       4096       Apr3 12:31 ...

  8. wamp的搭建-个人笔记

    #wamp的配置 ##选项 1. 用apache 就下ts的 2. 是nginx或者iis 就用nts的 3. php win下面的 选择zip 或者msi的 ##apache的配置 1.配置apac ...

  9. Angular2 关于*ngFor 嵌套循环

    在项目开发中拿到的数据是这样的,要循环遍历出来.可是在ng2中好像不能直接遍历Object datas: any = [ { num: 1, date: "2017-04-12", ...

  10. Nginx教程(三) Nginx日志管理

    Nginx教程(三) Nginx日志管理 1 日志管理 1.1 Nginx日志描述 通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息:通过错误日志,你可以得到系统某 ...