我最近开始全天学习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
吗?
答案 0 :(得分:4)
exit
退出脚本。传递给exit
的参数表示要返回的值。非零表示失败。如果您的脚本成功,则exit 0
。如果失败,则为exit 1
。