一、退出状态

系统每执行一个命令,都会返回一个退出状态,若返回退出状态为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 [])、操作符、[]与[[]]区别的更多相关文章

  1. linux-shell-引用-命令替换-命令退出状态-逻辑操作符

    命令替换:bash7步扩展的之一 嵌套  这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...

  2. Linux Shell学习笔记:exit退出状态代码

    inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...

  3. Linux 进程--父进程查询子进程的退出状态

    僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止. 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它 ...

  4. 配置服务器有错/usr/libexec/gconf-sanity-check-2的退出状态为256

    问题描述: CentOS启动的时候报如下错误:“配置服务器有错/usr/libexec/gconf-sanity-check-2的退出状态为256” 问题原因: 在装hadoop的时候误删了/tmp文 ...

  5. Linux Shell编程(11)——退出和退出状态

    exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程.每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零值 ...

  6. shell中的退出状态码

    shell中的退出状态码最大只有255,如果超过这个值,就会进行取余运算,即如果执行如下命令: exit exitCode 如果exitCode大于255,那么实际的状态码为exitCode % 25 ...

  7. linux退出状态码及exit命令

    Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码.对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用$?变量.它的值会变成由shell所执行的最后一条命令的退出状态码: [ro ...

  8. Perl处理和收走子进程(退出状态码和wait)

    本文关于处理子进程退出状态码的内容主体来自于<Pro Perl>的第21章. 子进程退出状态码 每个子进程在退出时,操作系统都会保留它们的退出状态码,并在内核维护的进程表中保留子进程项.对 ...

  9. Linux退出状态码

    命令成功结束 一般性未知错误 不适合的shell命令 命令不可执行 没找到命令 无效的退出参数 +x 与Linux信号x相关的严重错误 通过Ctrl+C终止的命令 正常范围之外的退出状态码

随机推荐

  1. 学习笔记之三十年软件开发之路 - Things I Learnt The Hard Way (in 30 Years of Software Development)

    三十年软件开发之路 https://mp.weixin.qq.com/s/EgN-9bIHonRid1DM0csQDw https://blog.juliobiason.net/thoughts/th ...

  2. CentOS 7 - 以root身份登入Gnome

    新版的7.0很多资料没有,为了安全,linux是禁止root登录到桌面,但为了方便又想用root登录到桌面,在网上找了找,基本上都是这这一篇: http://shaoguangleo.blog.163 ...

  3. Spring 在xml文件中配置Bean

    Spring容器是一个大工厂,负责创建.管理所有的Bean. Spring容器支持2种格式的配置文件:xml文件.properties文件,最常用的是xml文件. Bean在xml文件中的配置 < ...

  4. C#中多集合组合实现

    C#中多集合组合使用方法,主要用到 Enumerable.Join方法 var skuInfoList = new Dictionary<int, List<long>>(); ...

  5. 基于TCP协议的远程终端控制并发socketserver实现以及粘包问题处理

    # 客户端 # -*- coding: utf-8 -*- import socketserver import struct import json import subprocess class ...

  6. vim 配置遇到的问题

    1 使用 Vundle 安装插件时提示输入 github 账户密码 .vimrc 中 Plugin ‘路径' 的路径填写错误,仔细检查下 2 在 vim 中执行 shell 命令(如 ls)会闪退 . ...

  7. Flume实战案例运维篇

    Flume实战案例运维篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Flume概述 1>.什么是Flume Flume是一个分布式.可靠.高可用的海量日志聚合系统,支 ...

  8. keepalived+nginx+lnmp 网站架构

    <网站架构演变技术研究> 项目实施手册 2019年8月2日 第一章:  实验环境确认 4 1.1-1.系统版本 4 1.1-2.内核参数 4 1.1-3.主机网络参数设置 4 1-1-4 ...

  9. python+正则提取+ip代理爬取糗事百科文字信息

    很多网站都有反爬措施,最常见的就是封ip,请求次数过多服务器会拒绝连接,如图: 在程序中设置一个代理ip,可有效的解决这种问题,代码如下: # 需要的库 import requests import ...

  10. 如何查看自己steam库里游戏是哪个区的

    1 开启Steam开发者模式,切换到控制台,以便调出游戏区域数据 1.1 首先找到Steam的快捷方式,在目标一行中最后输入 -dev (前面带空格),然后重新运行. 1.2 如下图上方标签切换到控制 ...