LinuxBash中$?的详细用法实例小结

Written by

in

文章目录
  • 在类 unix 操作系统中,理解退出状态的概念是非常必要的。每当命令或程序完成执行时,它都会向 shell 发送一个退出状态。这个退出状态是一个整数,表示命令是否成功。 按照惯例,退出状态为 0 表示成功,而任何非零值 (1-255) 表示错误。每个非零退出状态可以对应于不同类型的错误,允许脚本根据遇到的特定错误采取各种纠正操作。
  • $? 变量捕捉到了这种退出状态。每次执行完命令后,可以通过 $? 获取执行的状态。 例如:我们想创建一个目录,我们可以使用 $? 检查目录创建是否成功。 mkdir /path/to/directory if [ $? -eq 0 ] then echo “Directory was created successfully.” else echo “Failed to create the directory.” fi
  • 退出状态也可以直接在条件中使用,而不需要明确引用 $?,shell 允许使用逻辑操作符 && 和 || 将命令链接在一起。&& 操作符仅在前一个命令成功 (退出状态为 0) 时运行下一个命令,而 || 操作符仅在前一个命令失败(退出状态非零) 时运行下一个命令。 下面我们使用这些操作符重写前面的脚本: mkdir /path/to/directory && echo “Directory was created successfully.” || echo “Failed to create the directory.” 这行代码与前面的脚本相同,但更简洁。
  • 正如命令和程序返回退出状态一样,bash 脚本中的函数也可以返回退出状态,这进一步增加了 $? 的功能。当函数完成时,它可以返回退出状态以指示成功或失败,或者向脚本的其余部分发出特定条件的信号。 下面是一个使用退出状态的函数示例 function check_directory { if [ -d “$1” ] then return 0 else return 1 fi } check_directory /path/to/directory if [ $? -eq 0 ] then echo “Directory exists.” else echo “Directory does not exist.” fi
  • 非零退出状态可以提供有关所发生错误类型的详细信息。例如,在某些命令中,退出状态为 1 可能表示小问题,而退出状态为 2 则表示严重错误。通过捕获和处理这些特定的状态,您的脚本可以以不同的方式处理不同的错误情况。 下面是如何使用特定退出状态的简单示例 command case $? in 0) echo “Command succeeded.” ;; 1) echo “Command failed due to minor problem.” ;; 2) echo “Command failed due to severe problem.” ;; *) echo “An unknown error occurred.” ;; esac
  • (1) $? 只保存最后执行的命令的退出状态。如果在检查 $? 之前执行了其他命令,退出状态将被覆盖。 (2) 并非所有命令和程序都遵循“0为成功”和“非0为错误”的约定。有些可能使用不同的状态码,或者没有准确地使用退出状态。经常检查您正在使用的命令的手册页或其他文档,以了解不同的退出状态代表什么 到此这篇关于Linux Bash 中 $? 的详细用法的文章就介绍到这了,更多相关Linux Bash $? 用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Linux Bash脚本中的IFS的作用 详解gitBash中使用Linux中的tree命令 linux所有命令都失效显示bash: xxxxx: command not found的解决 linux用户source .bashrc或.profile找不到文件的解决 Linux系统中.bash_profile文件详解 Linux下docker 容器退出bash的两种实现方法 浅析Linux之bash反弹shell原理 Linux下环境变量配置方法小结(.bash_profile和.bashrc的区别) Linux中Bash环境变量的配置方法 Linux bash:./xxx:无法执行二进制文件报错
  • 目录
    • 1. 理解退出状态
    • 2. $? 的作用
    • 3. 高级用法
    • 4. 在函数中使用退出状态
    • 5. 根据特定的退出状态执行操作
    • 6. 注意事项

    Bash (Bourne Again SHell) 是使用最广泛的 SHell 脚本语言之一,因为它与 Unix 和 Linux 系统兼容。它提供了许多内置函数和变量,使脚本编写更高效,更不容易出错。其中一个变量是 $?, 它是 Bash 脚本错误处理的一个组成部分。这个特殊变量保存最后一个执行命令的退出状态,这对于根据命令成功或失败控制脚本流至关重要。

    在类 unix 操作系统中,理解退出状态的概念是非常必要的。每当命令或程序完成执行时,它都会向 shell 发送一个退出状态。这个退出状态是一个整数,表示命令是否成功。

    按照惯例,退出状态为 0 表示成功,而任何非零值 (1-255) 表示错误。每个非零退出状态可以对应于不同类型的错误,允许脚本根据遇到的特定错误采取各种纠正操作。

    $? 变量捕捉到了这种退出状态。每次执行完命令后,可以通过 $? 获取执行的状态。

    例如:我们想创建一个目录,我们可以使用 $? 检查目录创建是否成功。

    mkdir /path/to/directory
    if [ $? -eq 0 ]
    then
        echo "Directory was created successfully."
    else
        echo "Failed to create the directory."
    fi

    退出状态也可以直接在条件中使用,而不需要明确引用 $?,shell 允许使用逻辑操作符 && 和 || 将命令链接在一起。&& 操作符仅在前一个命令成功 (退出状态为 0) 时运行下一个命令,而 || 操作符仅在前一个命令失败(退出状态非零) 时运行下一个命令。

    下面我们使用这些操作符重写前面的脚本:

    mkdir /path/to/directory && echo "Directory was created successfully." || echo "Failed to create the directory."

    这行代码与前面的脚本相同,但更简洁。

    正如命令和程序返回退出状态一样,bash 脚本中的函数也可以返回退出状态,这进一步增加了 $? 的功能。当函数完成时,它可以返回退出状态以指示成功或失败,或者向脚本的其余部分发出特定条件的信号。

    下面是一个使用退出状态的函数示例

    function check_directory {
        if [ -d "$1" ]
        then
            return 0
        else
            return 1
        fi
    }
    check_directory /path/to/directory
    if [ $? -eq 0 ]
    then
        echo "Directory exists."
    else
        echo "Directory does not exist."
    fi

    非零退出状态可以提供有关所发生错误类型的详细信息。例如,在某些命令中,退出状态为 1 可能表示小问题,而退出状态为 2 则表示严重错误。通过捕获和处理这些特定的状态,您的脚本可以以不同的方式处理不同的错误情况。

    下面是如何使用特定退出状态的简单示例

    command
    case $? in
    0)
        echo "Command succeeded."
    ;;
    1)
        echo "Command failed due to minor problem."
    ;;
    2)
        echo "Command failed due to severe problem."
    ;;
    *)
        echo "An unknown error occurred."
    ;;
    esac

    (1) $? 只保存最后执行的命令的退出状态。如果在检查 $? 之前执行了其他命令,退出状态将被覆盖。

    (2) 并非所有命令和程序都遵循“0为成功”和“非0为错误”的约定。有些可能使用不同的状态码,或者没有准确地使用退出状态。经常检查您正在使用的命令的手册页或其他文档,以了解不同的退出状态代表什么

    到此这篇关于Linux Bash 中 $? 的详细用法的文章就介绍到这了,更多相关Linux Bash $? 用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Linux Bash脚本中的IFS的作用
    • 详解gitBash中使用Linux中的tree命令
    • linux所有命令都失效显示bash: xxxxx: command not found的解决
    • linux用户source .bashrc或.profile找不到文件的解决
    • Linux系统中.bash_profile文件详解
    • Linux下docker 容器退出bash的两种实现方法
    • 浅析Linux之bash反弹shell原理
    • Linux下环境变量配置方法小结(.bash_profile和.bashrc的区别)
    • Linux中Bash环境变量的配置方法
    • Linux bash:./xxx:无法执行二进制文件报错

    站内搜索