退出和退出状态码

大家都知道exit是用来退出一个脚本,既可以使用exit来结束一个脚本,像常用的C语言一样,它也会返回一个值,这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理。

其实在linux中执行任何一个命令都会返回一个退出码,成功的命令返回0,而不成功的命令返回非零值,非零值通常通常都会解释成一个错误码。

当然脚本中的函数和脚本本身也会返回退出状态码,在脚本中最后执行的命令决定脚本返回的状态码(就是exit之前的命令)

#!/bin/bashtldr ls. . .# 在执行exit之前的一个命令决定脚本返回值状态码值
ls -l nameexit
# exit $?

不带参数的exit命令和exit $?的效果是一样的,就算你在脚本的末尾不写exit效果也是一样的

bash脚本中$?保存这最后执行命令的退出状态码,当函数返回之后,$?同样保存函数中最后执行的命令的退出状态码,这就是bash对函数返回值的处理方法,同样,当一个脚本退出$?保存了脚本的退出状态码,这个退出状态码就是脚本中最后执行的命令的退出状态码。

#!/bin/bash
echo hello
echo $?
# 退出状态为0, 因为命令执行成功.
lskdf
# 无效命令.
echo $?
# 非零的退出状态, 因为命令执行失败.
echo
exit 113
# 返回113退出状态给shell.
# 为了验证这个结果, 可以在脚本结束的地方使用"echo $?".
# 执行结果
andrew@andrew:/work/bash/src$ bash exit_example.sh
hello
0
exit_example.sh: 行 5: lskdf: 未找到命令
127andrew@andrew:/work/bash/src$ echo $?
113

使用$?测试脚本中命令执行的结果,往往显得特别的有用

逻辑非操作,将会反转命令或条件的测试结果,将会影响退出状态码

true # "true" 是内建命令.
echo "exit status of \"true\" = $?"
# 0! true
echo "exit status of \"! true\" = $?"
# 1
# 注意: "!" 需要一个空格.
# !true将导致"command not found"错误# 如果一个命令以'!'开头, 那么会启用Bash的历史机制.true
!true
# 这次就没有错误了, 也没有反转结果.
# 它只是重复了之前的命令(true).

bash-shell高级编程--退出和退出状态码相关推荐

  1. UNIX环境高级编程(第三版 源码及编译好的静态库文件)

    UNIX环境高级编程(第三版) 源码 及 库文件 链接: https://pan.baidu.com/s/1tPY17lWNDEbzkOwZaRUUNg 提取码: 1024 复制这段内容后打开百度网盘 ...

  2. Bash Shell脚本编程-变量知识

    Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 ...

  3. linux shell 高级编程,shell高级编程

    条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi ...

  4. linux脚本怎么获取参数,在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?...

    Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现 ...

  5. shell高级编程笔记(第九章 变量重游)

    第三部分 超越基本 第九章 变量重游 如果变量使用恰当,将会增加脚本的能量和灵活性.但前提是这需要仔细学习变量的细节知识. 9.1 内部变量 $BASH 这个变量将指向Bash的二进制执行文件的位置 ...

  6. shell高级编程笔记(第十章 循环和分支)

    第十章 循环和分支 对代码块进行操作是有组织的结构化的shell脚本的关键.为了达到这个目的,循环和分支提供帮助. 10.1 循环 循环就是重复一些命令的代码块,如果条件不满足就退出循环. for 循 ...

  7. 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍

    笔记 #运行级别脚本介绍 #准备工作 #进入目录 cd /home/wgb/shell #建立文件夹 mkdir 0421 #进入目录 cd 0421#运行级别 #运行级别目录 #进入etc目录 [r ...

  8. linux bash sh,linux bash shell.sh编程实例

    1.输出 #!/bin/bash echo "Please type your number:" read a for ((i=1;i<=a;i++)) do for ((p ...

  9. shell高级编程--引用

    引用 在shell中,引用的意思就是时讲字符串使用双拥好括起来,他的作用就是保护字符串中的特殊字符.不被shell或者shell脚本重新解释,或者扩展. andrew@andrew:~$ ls -l ...

  10. 博客文件第二部分 Linux Shell高级编程技巧——第一章 深入讨论

    最近研究博客文件,稍微总结一下,以后继续补充: 道歉 由于频视出了点问题,所以临时只有这点内容,期后再补上. 条记 #录记和域 #入深探讨awk #编辑 #vi awkif.sh #转变权限 [roo ...

最新文章

  1. 多项NLP任务新SOTA,Facebook提出预训练模型BART​
  2. caffe中的学习率的衰减机制
  3. mysql tinyint和char(1)性能对比
  4. producer send源码_RocketMq系列之Producer顺序消息发送源码分析(四)
  5. 深度学习之基于Tensorflow2.0实现Xception网络
  6. 正则不能输入特殊字符_正则表达式语法学习和在线练习
  7. 的write方法有哪些参数_向子进程传递大量数据的方法
  8. mysql5.6 replication_MySQL 5.6 Replication
  9. php 采集暂停的原因,为什么小弟我curl的每次都只能抓取18个左右就自动停止了...
  10. Django学习笔记之Ajax入门
  11. 【社招】量化研究员(机器学习)-Akuna Capital -上海
  12. RedShift护眼软件的配置
  13. Eureka Client 源码解析
  14. 华硕ASUS RT-AC66U无线路由器部署NTP Server最佳实践
  15. RTThread 挂载SD卡 init SD card failed
  16. JavaScript children和childNodes
  17. ubuntu18.04 opencv 获取摄像头 (C++/python) 双目摄像头
  18. 一个月薪10000的北京程序员的真实生活
  19. 4. Java并发编程-管程
  20. 手机通用root刷补Magisk教程

热门文章

  1. hdu 3572(最大流)
  2. NYOJ 312 20岁生日
  3. hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
  4. Listener--------监听器
  5. Eclipse出现Class Not Found异常时可以参考我所知道的一个方案
  6. HashMap的hash冲突解决方案
  7. css 用direction来改变元素水平方向,价值研究。
  8. ng-init,ng-controller,ng-model
  9. 坚持使用GNU/Linux
  10. UEFI主板GPT方式安装CentOS 6.4