如何在Bash命令行单次调用script.sh中指定的多个函数顺序执行
问题根因
- 原脚本的
case分支匹配到第一个传入的函数名后,执行完直接调用了exit,导致脚本直接终止,后续传入的函数没有执行机会 - 函数内部的
$1 && shift && "@a"属于无效写法,无实际作用还可能引发报错 - 原脚本没有遍历所有传入参数的逻辑,只能处理第一个传入的函数名
修复后可实现需求的脚本代码
#!/bin/bash delete_code() { echo "code deleted" } create_code() { echo "code created" } stop_node_pool() { echo "node pool stopped" } start_node_pool() { echo "node pool start" } # 遍历所有传入的参数,依次执行匹配的函数 for func in "$@"; do case $func in delete_code|create_code|stop_node_pool|start_node_pool) "$func" ;; *) echo "警告:不存在的函数名 $func,已跳过" ;; esac done
使用方法
不需要加多余的run前缀,直接把要执行的函数名按顺序作为参数传入脚本即可,比如要先执行delete_code再执行stop_node_pool,直接运行:./script.sh delete_code stop_node_pool
执行输出会按顺序返回:
code deleted
node pool stopped
方案支持传入任意数量的合法函数名,会严格按照传入顺序依次执行。
内容的提问来源于stack exchange,提问作者Athithanambi Anna Anban
相关产品推荐
相关产品推荐

