如何通过删除“if”来调试脚本?

如何通过删除“if”来调试脚本?

我有以下代码:

debug=$?
function a {
    su - javi -c "uptime"
    return $debug
}

function b {
    su - javi -c "cat /etc/redhat-release"
    return $debug
}

function c {
    su - javi -c "cat /etc/redhat-release"
    return $debug
}

case $debug in
0)
    a
    if [ $debug == 0 ]; then
        b
        echo "se ejcuta la funcion"
    elif [ $debug == 0 ]
        c   
    elif[].... <-----this

    fi
;;

1)
    echo "se ha producido un error"
;;

esac

有没有办法通过删除 if 来进行调试?我希望他们运行一个函数,如果它结束得很好,则跳转到另一个函数,如果它结束得不好,它会留下 escript,即有 5 个函数

答案1

如果目标只是运行每个函数,并避免出现任何错误,也许这样的事情会起作用:

function bail {
    echo "se ha producido un error ($1)"
    exit 1
}

function a {
    uptime
}

function b {
    cat /etc/redhat-release
}

function c { 
    cat /etc/redhat-release
}

for f in 'a' 'b' 'c'; do
    $f || bail "$f: $?"
done

这将运行每个函数,如果遇到错误,函数名称和退出代码将发送到该bail函数,该函数将打印一行并退出任何其他命令。

我确实删除了 的使用,su因为这样更容易测试。如果您想自动执行此操作,我建议创建一个 sudo 配置文件来以提升的权限运行这些命令,这样您只需输入密码一次,或者根本不需要输入密码。

答案2

  1. debug=$?不会在每个命令中进行评估。因此 的值debug在整个脚本中都是相同的。
  2. 函数的返回码是其最后一个命令的返回码。所以 return 语句是没有意义的。

总而言之,类似的东西如果成功a && b && c就会运行,如果成功就会运行。该复合命令的返回码是每个函数的第一个非零返回码。bacb

相关内容