【发布时间】:2019-08-31 05:55:00
【问题描述】:
我正在编写一个 bash 脚本来配置 NFS 服务器。我能够手动配置 NFS 服务器并且它功能齐全。 现在我想在 bash 脚本中重现相同的步骤。 我有所有的步骤,每一步,shell 命令,我都放入了一个 bash 函数。 然后我有一个主要部分,我在其中进行函数调用,总共有 16 个函数。 在主要部分我想检查函数返回值,通常只是“$?”价值
if [ "function_1" -eq "0" ]; then
echo "Success"
else
echo "Failure"
fi
由于有16个函数调用,其中每个函数调用都依赖于前一个函数才能成功,所以整个事情变得有点笨拙
if [ "function_1" -eq "0" ]; then
if [ "function_2" -eq "0" ]; then
if [ "function_3" -eq "0" ]; then
if [ "function_..." -eq "0" ]; then
if [ "function_16" -eq "0" ]; then
我的问题是,这是构建程序的正确方法还是完全不使用函数而只在主要部分中进行命令验证会更好
chmod -R 0755 $SHARED_FILE_SYSTEM
if [ "$?" -eq "0" ]; then
echo "Success"
else
echo "Failure
fi
【问题讨论】:
-
我假设你只是想要
if function_1 && function_2 && ... && function 16; then -
嗨@chepner,谢谢你的信息。是的,我想过。我假设一旦一个函数条件失败,比如在 function_2 上,整个过程就会停止并返回 anon ")" 值。我怎么知道哪个函数调用失败了。我想向 asn 安装日志输出一条错误消息,以便用户可以检查哪个语句/命令导致错误
-
@user2872898,这是添加一些工具的问题。让每个函数在启动时设置一个变量,然后你就在那里——该值告诉你最后一个运行的变量……当然,如果你不只是想记录整个事情;对于我自己的安装程序,我运行
set -x并带有适当的信息PS4。 -
顺便说一句,请注意使用
$?通常是一种不好的做法,如果您要做的只是区分零/非零以便立即分支。if chmod -R 0755 "$SHARED_FILE_SYSTEM"; then echo "Success"; else echo "Failure"确保分支是基于chmod完成的,并且不会被记录命令或其他可能无意更改$?的事情中断。 -
...我也,作为一个成语,做类似
chmod 0755 "$SHARED_FILE_SYSTEM" || die "Failure setting permissions for shared filesystem的事情,而die是类似die() { echo "$*" >&2; exit 1; }的事情
标签: bash function conditional-statements