bash-shell高级编程--退出和退出状态码
退出和退出状态码
大家都知道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高级编程--退出和退出状态码相关推荐
- UNIX环境高级编程(第三版 源码及编译好的静态库文件)
UNIX环境高级编程(第三版) 源码 及 库文件 链接: https://pan.baidu.com/s/1tPY17lWNDEbzkOwZaRUUNg 提取码: 1024 复制这段内容后打开百度网盘 ...
- Bash Shell脚本编程-变量知识
Shell:GUI CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 ...
- linux shell 高级编程,shell高级编程
条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else条件为假的分支代码 fi ...
- linux脚本怎么获取参数,在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?...
Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现 ...
- shell高级编程笔记(第九章 变量重游)
第三部分 超越基本 第九章 变量重游 如果变量使用恰当,将会增加脚本的能量和灵活性.但前提是这需要仔细学习变量的细节知识. 9.1 内部变量 $BASH 这个变量将指向Bash的二进制执行文件的位置 ...
- shell高级编程笔记(第十章 循环和分支)
第十章 循环和分支 对代码块进行操作是有组织的结构化的shell脚本的关键.为了达到这个目的,循环和分支提供帮助. 10.1 循环 循环就是重复一些命令的代码块,如果条件不满足就退出循环. for 循 ...
- 第二部分 Linux Shell高级编程技巧——第三章 运行级别脚本介绍
笔记 #运行级别脚本介绍 #准备工作 #进入目录 cd /home/wgb/shell #建立文件夹 mkdir 0421 #进入目录 cd 0421#运行级别 #运行级别目录 #进入etc目录 [r ...
- 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 ...
- shell高级编程--引用
引用 在shell中,引用的意思就是时讲字符串使用双拥好括起来,他的作用就是保护字符串中的特殊字符.不被shell或者shell脚本重新解释,或者扩展. andrew@andrew:~$ ls -l ...
- 博客文件第二部分 Linux Shell高级编程技巧——第一章 深入讨论
最近研究博客文件,稍微总结一下,以后继续补充: 道歉 由于频视出了点问题,所以临时只有这点内容,期后再补上. 条记 #录记和域 #入深探讨awk #编辑 #vi awkif.sh #转变权限 [roo ...
最新文章
- 多项NLP任务新SOTA,Facebook提出预训练模型BART​
- caffe中的学习率的衰减机制
- mysql tinyint和char(1)性能对比
- producer send源码_RocketMq系列之Producer顺序消息发送源码分析(四)
- 深度学习之基于Tensorflow2.0实现Xception网络
- 正则不能输入特殊字符_正则表达式语法学习和在线练习
- 的write方法有哪些参数_向子进程传递大量数据的方法
- mysql5.6 replication_MySQL 5.6 Replication
- php 采集暂停的原因,为什么小弟我curl的每次都只能抓取18个左右就自动停止了...
- Django学习笔记之Ajax入门
- 【社招】量化研究员(机器学习)-Akuna Capital -上海
- RedShift护眼软件的配置
- Eureka Client 源码解析
- 华硕ASUS RT-AC66U无线路由器部署NTP Server最佳实践
- RTThread 挂载SD卡 init SD card failed
- JavaScript children和childNodes
- ubuntu18.04 opencv 获取摄像头 (C++/python) 双目摄像头
- 一个月薪10000的北京程序员的真实生活
- 4. Java并发编程-管程
- 手机通用root刷补Magisk教程