我有一个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
语句的任何线索吗?
谢谢。
我知道插入法非常方便,但是鉴于您的示例代码片段,我看不到如何
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上查看了您的代码,我本人肯定会走这条路线。