2

我有一个 bash 脚本,它使用 case 语句恢复中止的执行。它适用于 CentOS 6 下的 Bash 4,但由于 Bash 3.2 而不适用于 CentOS 5。

是否有任何编程逻辑可以用来将以下内容替换为更“便携”的内容?

last-action=$(cat /tmp/last-action)

case last-action in)
    beginning)
    function1
    ;&
    middle)
    function2
    ;&
    end)
    function3
    ;&
esac

问题是,无论任务执行在哪里停止,它都必须在那里恢复并执行之后的所有内容。例如,如果last-action=middle它会执行function2然后function3. 这就是操作员;&派上用场的地方。

在没有大量if陈述的情况下,有任何线索可以做到这一点吗?

4

1 回答 1

2

我知道失败非常方便,但是鉴于您的示例片段,我不知道如何

case "${last_action}" in
        beginning)
                function1
                function2
                function3
                ;;
        middle)
                function2
                function3
                ;;
        end)
                function3
                ;;
esac

会给你的代码增加很多开销。它仍然比很多ifs漂亮。

但是,如果您的开关更复杂并且您希望它更具动态性,您可以执行以下操作:

#!/bin/bash

function1() { echo 1; }
function2() { echo 2; }
function3() { echo 3; }

last_action=$1

actions_beginning="function1 function2 function3"
actions_middle="function2 function3"
actions_end="function3"

_actions="actions_${last_action}"
for action in ${!_actions}; do
        "${action}"
done

 

$ ./test.sh beginning
1
2
3
$ ./test.sh middle
2
3
$ ./test.sh end
3

编辑:刚刚在 github 上查看了您的代码,我自己肯定会走这条路。

于 2013-08-01T11:48:05.973 回答