学过C语言都知道,我们用exit来返回一个状态,Bash也是一样,这样父进程会判断子进程是否可用。 一个良好的习惯就是在脚本结束时都返回状态。成功返回0,非0值一般对应一个错误码。
当一个脚本以不带参数 exit 来结束时,脚本的退出状态就由脚本中最后执行命令来决定.
$?读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给
函数返回值的方法是 Bash 的方法.
让我们看个简单的例子:
#!/bin/bash
ls -l
echo $?
lskdf
echo $?
! true
[yuyzhu@vm10010 experiment]$sh testExit.sh
total 8
-rwxr-xr-x 1 yuyzhu yuyzhu 8 Oct 12 2011 input
-rwxr-xr-x 1 yuyzhu yuyzhu 9 Oct 12 2011 input1
-rwxr-xr-x 1 yuyzhu yuyzhu 63 Feb 25 23:57 shellUntil
-rwxr-xr-x 1 yuyzhu yuyzhu 64 Aug 23 2013 SReturn
-rwxr-xr-x 1 yuyzhu yuyzhu 44 Aug 29 2011 testEnvSettings
-rw-rw-r-- 1 yuyzhu yuyzhu 49 Mar 2 20:55 testExit.sh
-rwxr-xr-x 1 yuyzhu yuyzhu 389 Oct 9 2011 testpackateutils
-rwxr-xr-x 1 yuyzhu yuyzhu 96 Oct 12 2011 testPatter
0
testExit.sh: line 5: lskdf: command not found
127
[yuyzhu@vm10010 experiment]$echo $?
1
由于'ls -l'会正确执行,输出状态为0,'lskdf'命令不存在,返回状态为127, 最后由于!逻辑操作,将会反转test命令的结果,这回影响推出状态,所以在执行完脚本后$?的值为1.
一个脚本的状态码可以自定义,写到注释里面,但一些特定的退出码都有预定的含义,避免冲突。
退出码(exit status,或exit code)的约定:
0表示成功(Zero - Success)
非0表示失败(Non-Zero - Failure)
2表示用法不当(Incorrect Usage)
127表示命令没有找到(Command Not Found)
126表示不是可执行的(Not an executable)
>=128 信号产生
也可以通过man exit查看exit的约定。
分享到:
相关推荐
TestLink 是一款开源的测试管理工具,用于组织和管理软件测试过程。本教程将指导你如何从零开始,一步步地在Linux系统上安装TestLink。首先,你需要准备一个Linux系统的镜像,这里推荐使用CentOS的最小化版,可以从...
若需要退出,按`Ctrl+C`即可。 **5. 常见问题及解决方案** - **网络连接失败**:检查配置文件中的账号、密码和网卡名称是否正确。 - **无法启动mentohust**:可能是因为缺少依赖或权限问题,检查日志`/var/log/...
保存并退出,然后使更改立即生效: ```bash # source ~/.bash_profile ``` ##### 4.5 设置主机名和 IP 编辑 `/etc/hosts` 文件,并添加服务器的 IP 地址和主机名: ```bash # echo "192.168.1.100 servername" >...
本文介绍的“非常简单的Shell菜单脚本”就是一种基础的Shell脚本应用,它创建了一个简单的菜单系统,使用户能够通过选择编号来执行不同的功能,实现了人机交互的“傻瓜式”操作。 首先,脚本通过`#!/bin/sh`行指定...