`
zhuyuyuseu
  • 浏览: 9397 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

傻瓜学Bash - 退出和退出状态

阅读更多
  学过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的约定。
分享到:
评论

相关推荐

    bash-4.4版本升级手册带安装包

    在Linux和Unix系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,用于处理用户输入的命令和脚本。Bash 4.4是其一个重要版本,带来了多项改进和新功能。在旧版本中,特别是低版本的Bash,存在一个名为...

    修复bash漏洞的bash-4.4.tar.gz源码包

    linux 服务器GNU Bash小于版本4.3有操作系统命令注入漏洞,需要对bash升级,下载解压 #tar zxvf bash-4.4.tar.gz #cd bash-4.4 #./configure (如果centos7编译失败,请先安装#yum install gcc) #make #make ...

    解决ssh远程登陆linux显示-bash-4.1$的问题

    cp -pr /etc/skel/.bash* /home/test/ #/home/test是用户目录 改变用户家目录:usermod -md /tmptest test 以上就是小编为大家带来的解决ssh远程登陆linux显示-bash-4.1$的问题全部内容了,希望大家多多支持软件开发...

    bash-completion-2.1-6.el7.noarch.rpm

    在centos6或rhel6 操作系统安装bash-completion-2.1-6.el7.noarch.rpm后,重启即生效

    bash-3.1-MSYS-1.0.11-snapshot.tar

    bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!

    bash-completion-2.1-6.el7.noarch.rar

    标题中的“bash-completion-2.1-6.el7.noarch.rar”指的是一个用于Linux系统的命令行自动补全工具bash-completion的版本2.1,适用于CentOS 6和7,以及RHEL 6和7的环境。这个压缩包是以RAR格式封装的“bash-...

    bash-completion-1.3-7.el6.noarch.rpm

    centos6的yum源里面没有bash-completion的包,需要单独下载安装。centos7的yum源里面已包含此安装包,可以通过yum直接安装。 **安装步骤** 1、rpm -ivh bash-...2、退出当前命令行,重新连接,即可使用bash命令补全

    bash-door分析

    - **定期审计**:定期进行系统安全审计,特别是对于bash等关键组件的版本和完整性检查。 - **加强权限管理**:限制普通用户的权限,避免非必要的sudo或su操作。 - **日志监控**:加强对系统日志的监控,及时发现异常...

    bash-completion-2.1-8.el7.noarch (1).rpm

    离线安装包,测试可用

    bash-4.1.2-15

    标题 "bash-4.1.2-15" 指的是 Bash shell 的一个特定版本,这是 Linux 和类 Unix 系统中广泛使用的命令行解释器。Bash 是 Bourne-Again SHell 的缩写,它是 GNU 工程的一部分,为用户提供了一个交互式环境来执行命令...

    bash-4.0 源码

    4. **作业控制**:bash允许用户在后台运行进程,通过`job.c`和`jobs.def.h`实现作业的状态跟踪和控制,如`fg`(前台)和`bg`(后台)命令。 5. **红蓝黑通道**:`io-redir.c`和`io-file.c`处理输入输出重定向,这是...

    bash-4.1.2-15.el6_5.1.x86_64.rpm

    修复redhat6 bash远程执行任意代码漏洞CVE-2014-6271

    bash-4.1.2-15.el6_5.2.x86_64.rpm

    执行如下命令查看设备是否存在bash安全漏洞。 #env -i X='() { (a)=>\\' bash -c '/dev/stdout echo vulnerable' 2>/dev/null 判定依据 如果以上命令的输出为以下内容则不合规: vulnerable

    bash-4.2.46-35.el7_9.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    Advanced Bash-Scripting Guide

    Advanced Bash-Scripting Guide

    bash-debuginfo-3.2-33.el5_11.4.x86_64

    Bash-debuginfo包是Bash的主要软件包的补充,它包含了一些特殊的符号和元数据,这些信息对于开发人员和系统管理员来说非常有用,当他们需要诊断或调试与Bash相关的错误和问题时。 具体来说,调试信息包括了源代码...

    bash-4.1.2-9.el6_2.i686.rpm

    bash-4.1.2-9.el6_2.i686.rpm是centos工具类。

    bash-3.2-33.el5.1.x86_64.rpm

    修复bash远程执行漏洞,支持redhat linux 64位操作系统 CVE-2014-6271

    Linux CentOS下shell显示-bash-4.1$不显示用户名路径.docx

    Linux CentOS 下 shell 显示-bash-4.1$ 不显示用户名路径解决方法 ...然而,在某些情况下,shell 显示-bash-4.1$ 不...同时,我们也了解了 .bash_profile 文件、PS1 变量、export 命令和 source 命令的作用和使用方法。

    出现bash-2.05b的解决办法

    出现bash-2.05b的解决办法,出现bash-2.05b的解决办法

Global site tag (gtag.js) - Google Analytics