Bash 3.2 case;&动作终止符,也可以在不测试模式的情况下执行下一个块

问题描述 投票:2回答:1

我有一个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语句的任何线索吗?

谢谢。

bash case centos5
1个回答
2
投票

我知道插入法非常方便,但是鉴于您的示例代码片段,我看不到如何

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

将会为您的代码增加很多开销。它比许多if还要漂亮。

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

#!/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上查看了您的代码,我本人肯定会走这条路线。

© www.soinside.com 2019 - 2024. All rights reserved.