退出状态、测试(test or [])、操作符、[]与[[]]区别
一、退出状态
系统每执行一个命令,都会返回一个退出状态,若返回退出状态为0,表示命令执行成功,
若返回退出状态不为0,表示命令执行有错误。
echo $? 可以打印出退出状态。
例如:ls
echo $?
| 状态值 | 含义 |
| 0 | 命令执行成功,没有错误 |
| 1-125 | 运行失败,脚本命令、系统命令错误或参数传递错误 |
| 126 | 有该命令,但无法执行 |
| 127 | 没有该命令 |
| >128 | 命令被系统强制结束 |
二、测试test或[]
测试命令用于判断表达式的真假。测试条件为真,返回值0;测试条件为假,返回值不为0。
这与C语言0为假有区别。
格式 test expression 或
[ expression ]
备注:"[" 后面与 "]" 前面的空格是必须的,否则会报错
三、整数比较运算符
格式: test "num1" numeric_operator "num2" 或
[ "num1" numeric_operator "num2" ]
例如:[ 1 -eq 1] 测试结果为0
| 整数比较符 | 含义 |
| num1 -lt num2 | 判断整数num1是否小于整数num2,如果整数num1小于num2,测试结果为真(0) |
| num1 -gt num2 | 判断整数num1是否大于整数num2,如果整数num1大于num2,测试结果为真(0) |
| num1 -eq num2 | 判断整数num1是否等于整数num2,如果整数num1等于num2,测试结果为真(0) |
| num1 -le num2 | 判断整数num1是否小于等于整数num2,如果整数num1等于num2,测试结果为真(0) |
| num1 -ge num2 | 判断整数num1是否大于等于整数num2,如果整数num1等于num2,测试结果为真(0) |
| num1 -ne num2 | 判断整数num1是否不等于整数num2,如果整数num1不等于num2,测试结果为真(0) |
四、字符串运算符
格式 :test "string1" operator "sting2" 或
[ "string1" operator "sring2" ]
test operator "string1" 或
[ operator "string1" ]
例如:[ "ab" == "ab" ] 测试结果为0
a="dfds"
[ -z "$a"] 测试结果不为0
| 字符串运算符 | 含义 |
| string1 == string2 (==两边空格不要省略) | 判断字符串string1是否等于字符串string2,如果整数string1等于string2,测试结果为真(0) |
| string1 != string2 (!=两边空格不要省略) | 判断字符串string1是否不等于字符串string2,如果整数string1等于string2,测试结果为真(0) |
| string1 | 判断字符串string1是否不为空,如果整数string1不为空,测试结果为真(0) |
| -n string1 | 判断字符串string1是否不为空,如果整数string1不为空,测试结果为真(0) |
| -z string1 | 判断字符串string1是否为空,如果整数string1为空,测试结果为真(0) |
五、文件运算符
格式 :test operator file 或
[ operator file ]
例如:ls (如果有普通文件a.csv)
[ -f a.csv] 测试结果为0
| 文件运算符 | 含义 |
| -d file | 判断file是否为目录,如果file是目录,测试结果为真(0) |
| -f file | 判断file是否为普通文件,如果file是普通文件,测试结果为真(0) |
| -e file | 判断file是否为存在,如果file是存在,测试结果为真(0) |
| -r file | 判断file是否可读,如果file可读,测试结果为真(0) |
| -w file | 判断file是否可写,如果file可写,测试结果为真(0) |
| -x file | 判断file是否可执行,如果file可执行,测试结果为真(0) |
| -s file | 判断file长度是否不为0,如果file长度是否不为0,测试结果为真(0) |
| -L file | 判断file是否符号化链接,如果file是符号化链接,测试结果为真(0) |
六、逻辑运算符
例如:[ 1 -eq 1 -a 2 -eq 2],测试结果为0(真)
[ ! 1 -eq 1 ],测试结果不为0(假)
| 逻辑运算符 | 含义 |
| ! expression | 如果expression为假,测试结果为真(0) |
| expression1 -a expression2 | 如果expression1和expression2同时为真,测试结果为真(0) |
| expression1 -o expression2 | 如果expression1或expression2其中一个为真,测试结果为真(0) |
七、[[]]与[]区别
这是内置在shell中的一个命令,它就比刚才说的[]强大的多了。支持字符串的模式匹配(使用=~操作符时甚至支持shell的基本和扩展正则表达式)。逻辑组合可以不使用[]的-a,-o而使用&& ||。
支持通配符,比如[[ hello == hell? ]],结果为真。
注意:使用[]和[[]]的时候不要吝啬空格,每一项两边都要有空格,[[ 1 == 2 ]]的结果为“假”,但[[ 1==2 ]]的结果为“真”!
例如:
[[ hello =~ he*llo]] ,测试结果为0(正则表达式)
[[hello == hell?]] ,测试结果为0(通配符)
退出状态、测试(test or [])、操作符、[]与[[]]区别的更多相关文章
- linux-shell-引用-命令替换-命令退出状态-逻辑操作符
命令替换:bash7步扩展的之一 嵌套 这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...
- Linux Shell学习笔记:exit退出状态代码
inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...
- Linux 进程--父进程查询子进程的退出状态
僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止. 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它 ...
- 配置服务器有错/usr/libexec/gconf-sanity-check-2的退出状态为256
问题描述: CentOS启动的时候报如下错误:“配置服务器有错/usr/libexec/gconf-sanity-check-2的退出状态为256” 问题原因: 在装hadoop的时候误删了/tmp文 ...
- Linux Shell编程(11)——退出和退出状态
exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程.每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值 ...
- shell中的退出状态码
shell中的退出状态码最大只有255,如果超过这个值,就会进行取余运算,即如果执行如下命令: exit exitCode 如果exitCode大于255,那么实际的状态码为exitCode % 25 ...
- linux退出状态码及exit命令
Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码.对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用$?变量.它的值会变成由shell所执行的最后一条命令的退出状态码: [ro ...
- Perl处理和收走子进程(退出状态码和wait)
本文关于处理子进程退出状态码的内容主体来自于<Pro Perl>的第21章. 子进程退出状态码 每个子进程在退出时,操作系统都会保留它们的退出状态码,并在内核维护的进程表中保留子进程项.对 ...
- Linux退出状态码
命令成功结束 一般性未知错误 不适合的shell命令 命令不可执行 没找到命令 无效的退出参数 +x 与Linux信号x相关的严重错误 通过Ctrl+C终止的命令 正常范围之外的退出状态码
随机推荐
- 1+X证书学习日志——css 2D&过渡
css 位移常用属性 transform:translate(x,y): transform:translateX(); transform:translateY(); 旋转属性 2d旋转: tran ...
- 《大象 Thinking in UML》读书笔记:软件开发——从现实世界到对象世界
参考:Process-oriented vs. Object-oriented 前言 软件行业在采用OO的思想后,从一开始只对编码使用OO,到现在“分析-设计-编码”全部环节使用OO,形成了OOA.O ...
- 26.centos7基础学习与积累-012-文件和目录的属性
从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 1.文件的属性(文件的信息描述): [root@python01 ~]# ls -l ...
- CentOS6.5_x64上简单编译配置Heartbeat3.0.4
Heartbeat 3与 2.x的最大差别在于,3 按模块把的原来2.x 拆分为多个子项目,并且提供了一个cluster-glue的组件,专用于Local ResourceManager 的管理.即h ...
- Electrification Plan 最小生成树(prim+krusl+堆优化prim)
题目 题意: 无向图,给n个城市,n*n条边,每条边都有一个权值 代表修路的代价,其中有k个点有发电站,给出这k个点的编号,要每一个城市都连到发电站,问最小的修路代价. 思路: prim:把发电站之间 ...
- 移动架构师第一站UML建模
回想一下自己的Android生涯已经经历过N多个年头了,基本都是在编写业务代码,都知道35岁程序员是一个坎,当然如果有能力能做到Android架构师的职位其生命周期也会较长,毕境不是人人都能轻易做到这 ...
- CentOS 7.5下KVM的安装与配置
由于没有物理机可用,在自己的VMware Workstation中CentOS 7.5下搭建完成. 首先查看VMware Workstation是否支持虚拟化,把红框内打钩即可. 虚拟化开启并安装Ce ...
- 次小生成树(lca)
题目描述 原题来自:BeiJing 2010 组队赛 给定一张 N 个点 M 条边的无向图,求无向图的严格次小生成树. 设最小生成树的边权之和为 sum,严格次小生成树就是指边权之和大于 sum 的生 ...
- 项目Beta冲刺(团队) --1/7
课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺) 团队名称:葫芦娃队 作业目标:尽力完成 团队博客 队员学号 队员昵称 博客地址 041602421 der himmel ht ...
- JS获取访客IP进行自动跳转
因业务需要进行地区判断跳转指定站点,下面是我个人实现的办法,分享给大家,仅供参考,切勿做非法用途 第一步,获取IP并判断归属地 直接使用搜狐的IP库查询接口 <script type=" ...