bash - 订购功能和条件的正确方法

标签 bash function conditional-statements

我正在编写一个 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

最佳答案

一个选项是制作一个函数列表并循环运行它们,如 Shellcheck 所示。 -干净的代码:

#! /bin/bash -p

# ...

config_functions=(
    function_1
    function_2
    # ...
    function_15
    function_16 )

for cfunc in "${config_functions[@]}" ; do
    if "$cfunc" ; then
        printf 'Success: %s\n' "$cfunc"
    else
        printf 'Failure: %s (%d)\n' "$cfunc" "$?"
    fi
done
  • 没有必要明确地检查$?Shellcheck如果你这样做会发出警告。参见 Shellcheck SC2181 .
  • 如果您想在任何函数失败时立即停止,请适本地将 breakexit "$?" 放入 如果

如果函数接受参数,这种方法也很有效,但前提是参数始终相同。 (只需将参数添加到循环中的函数调用即可。)如果不同的函数采用不同的参数,则效率会降低。您可以尝试将完整的函数调用放在数组的字符串中,但处理需要引用的参数很棘手。

考虑使用配置管理工具,例如 Chef , Puppet , Ansible , 或 Salt配置您的 NFS 服务。与脚本相比,它们有很多优势。

关于bash - 订购功能和条件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601273/

相关文章:

linux - bash中有 "goto"语句吗?

linux - Bash 脚本运行带参数的程序不起作用

php - INSERT INTO & LAST_INSERT_ID inside Query inside 函数

javascript - 将*所有* javascript 变量(甚至未定义)作为函数参数传递的优缺点是什么?

javascript - 是否可以使用 javascript 在条件语句中将某人发送到网站?

linux - 在 bash 脚本中正确使用退格函数

linux - 查找命令不起作用

c++ - 解析有符号和无符号 int 之间的 char 是否未指定?

python 线程 - "condition.wait"和 "condition.notifyAll"是如何工作的

javascript - 是否可以有条件地设置 console.log() 的输出样式? (对于网络浏览器)