一份菜单

Bash Shell退出状态教程和实际示例

在我们的 bash介绍文章,我们了解到一个shell脚本文件包含要由shell解释器执行的3d捕鱼达人列表。在本文中,让我们回顾一下shell3d捕鱼达人及其内部。

3d捕鱼达人是单词序列。第一个单词表示要执行的3d捕鱼达人,其余单词作为参数传递,其中参数可以是3d捕鱼达人的选项或参数。

在3d捕鱼达人行中执行的一些常见Unix3d捕鱼达人是shell3d捕鱼达人。例如,ls,lpr和grep3d捕鱼达人。

$ ls -alF

$ lpr filename

$ grep "string" filename

Shell3d捕鱼达人退出状态

3d捕鱼达人的返回值是其退出状态,如果3d捕鱼达人被信号N终止则返回128 +N。退出状态用于检查3d捕鱼达人执行的结果(成功/失败)。如果退出状态为零,则3d捕鱼达人为成功。如果3d捕鱼达人失败,则退出状态将为非零。

退出值 退出状态
0(零) 成功
非零 失败
2 用法不正确
127 找不到相关3d捕鱼达人
126 不是可执行文件

$?外壳变量

外壳变量名$?是一个特殊的内置变量,具有最后执行的3d捕鱼达人的退出状态。

  • shell函数执行后,$?返回函数中最后执行的3d捕鱼达人的退出状态。
  • 执行完shell脚本后,$?返回脚本中最后执行的3d捕鱼达人的退出状态。

说明Shell3d捕鱼达人退出状态的示例Shell脚本

以下exitstatus.sh shell脚本显示了各种shell3d捕鱼达人退出状态的示例。

$ cat exitstatus.sh
#! /bin/bash

echo -e "成功ful execution"
echo -e "====================="
echo "hello world"
# 退出状态 returns 0, because the above command is a success.
echo "退出状态" $? 

echo -e "用法不正确"
echo -e "====================="
ls --option
# 用法不正确, so exit status will be 2.
echo "退出状态" $? 

echo -e "找不到相关3d捕鱼达人"
echo -e "====================="
bashscript
# 退出状态 returns 127, because bashscript command not found
echo "退出状态" $? 

echo -e "Command is not an executable"
echo -e "============================="
ls -l execution.sh
./execution.sh
# 退出状态 returns 126, because its not an executable.
echo "退出状态" $?

现在,执行上面的exitstatus.sh查看示例shell脚本给出的各种退出状态。

$ bash exitstatus.sh
Successful execution
=====================
hello world
Exit status 0
Incorrect usage
=====================
ls: unrecognized option `--option'
Try `ls --help' for more information.
Exit status 2
Command Not found
=====================
exitstaus.sh: line 15: bashscript: command not found
Exit status 127
Command is not an executable
=============================
-rw-r--r-- 1 root root 659 Mar  9 13:36 execution.sh
exitstatus.sh: line 21: ./execution.sh: Permission denied
Exit status 126

注意:检查函数或3d捕鱼达人的返回值是程序员的主要职责之一。在编写任何代码时,这应该成为您的第二本性。

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux3d捕鱼达人(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! 15个实用的Linux Find3d捕鱼达人示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 4 评论… 加一 }

  • 香塔努橡木 2010年3月26日,上午8:44

    我想补充3分。
    1)您需要输入$?运行3d捕鱼达人后立即执行。
    2)不要忘记可以将退出代码保存到myvar = $之类的变量中吗?和
    3)显示管道破裂时最后一条3d捕鱼达人的退出代码。例如
    some_command | ls
    上面的3d捕鱼达人的退出代码是0,而不是some_command的情况下的127。&& ls

  • 卡塔林 2010年3月28日,上午7:14

    尝试这个 :
    $ aaa
    $回声“Exit status” $?
    退出状态 130
    ðŸ〜‰

  • 卡洛斯 2010年4月29日,上午9:24

    您好Catalin。

    您的注释(包括退出状态)听起来像shell中的bug(肯定存在!)。

    也许当您像3d捕鱼达人一样使用$ aaa时(我假设$ aaa为null),退出状态为2。当您打印$ 0时,仅这样做便使$ 0 = $ 0 + 128…. I guess??

    即使没有记录下来,我也发现了一些类似的问题。稍作努力,您就可以得到结果,也许用其他指令完成相同的任务,也许会出错并让变量取错误的值,…

    有任何想法吗?

    卡洛斯

  • 卡塔林 2010年4月30日,上午10:27

    是的。为null,因为未声明。
    3d捕鱼达人外壳是bash Fedora 13。

发表评论