"退出1"的目的在if语句中

时间:2016-04-17 23:56:21

标签: bash

我最近开始全天学习bash,今天我找到了一些我无法完全理解的东西。

我了解到在[ ]内运行测试是确定不同内容的好方法

我正在创建一个脚本来安装我所有不同的bash脚本以将它们收集在一个文件夹中,并将环境变量设置为$HOME/bin以及类似的东西。

但是我开始编写脚本,但我已经遇到了问题。

以下代码似乎只输出第一次测试的结果。

#!/usr/bin/env sh
# Installs base system
# Running tests


rsversion=0
sysname=rpsys
# Is setup already done?
if [ -e /etc/.rpsysSetupDone ]; then
    echo "Alright... RpSys v$rsversion is allready installed, uninstalling" >&2
else
    echo "No previous install found, continuing." >&2
    exit 1
fi


# Am I root?
if [ "$(whoami)" = 'root' ]; then
    echo 'Error: this script cannot be executed by root'
else 
    echo "okay proceeding" >&2
    exit 1
fi

然而,当我查看其他一些bash脚本时,它们似乎以类似的方式完成,但正在工作。

我在第一个测试中注释了exit 1以查看exit 1是否退出了整个脚本,我认为是正确的(或者至少我是这么认为的),因为它在第一次测试中被删除了测试输出是两个测试的结果。

为了确定是否存在任何显着差异,我还尝试在最后一次测试中注释掉exit 1,结果相同。两个测试都运行正常。我尝试在两个测试中添加exit 1,但似乎只有第一个测试运行。

所以我的问题是,我在代码示例中正确使用exit 1吗?

1 个答案:

答案 0 :(得分:4)

exit退出脚本。传递给exit的参数表示要返回的值。非零表示失败。如果您的脚本成功,则exit 0。如果失败,则为exit 1