Bash脚本中等于及不等于运算符判断参数不生效问题
Bash脚本参数判断不生效问题解决方案
核心问题
你只在脚本中完成了prepare_for_test函数的定义,没有主动调用该函数,也没有将脚本接收的外部参数传递到函数内部。执行脚本时,默认只会按顺序运行顶层代码,函数内部的所有逻辑(包括参数判断、startglassfish调用、参数校验)都不会被触发。
如果你的参数校验逻辑写在函数外部也没生效,大概率是脚本没有加执行权限、或者运行时没有指定正确的脚本路径,导致实际执行的是其他同名命令。
修复步骤
1. 调整脚本完整结构
修改preparefortests.sh内容,补充函数调用逻辑,同时将脚本入参透传给函数:
#!/bin/bash # 自定义函数定义 prepare_for_test(){ stopresources initresources if [ "$1" = "--gf" ]; then startglassfish fi docker ps notify-send "Done!" "You can now test" -t 10000 } # 顶层参数校验 if [ "$1" ] && [ "$1" != "--gf" ]; then echo "unknown parameter $1" exit 1 fi # 调用函数,透传脚本所有入参 prepare_for_test "$@"
2. 修复别名不生效问题
Bash非交互模式(运行脚本的场景)默认关闭别名展开功能,如果startglassfish是你定义的别名,有两种处理方式:
- 推荐:将
startglassfish别名改为函数定义,或者直接替换为对应的完整可执行命令路径,兼容性最好 - 若必须保留别名,在脚本开头
#!/bin/bash后新增一行配置开启别名展开:
shopt -s expand_aliases
注意需要保证startglassfish的别名定义在这行配置之后,或者提前通过source命令加载到脚本环境中。
3. 赋予脚本执行权限
运行如下命令给脚本加可执行权限:
chmod +x preparefortests.sh
之后通过相对/绝对路径运行脚本即可得到预期结果:
# 触发startglassfish执行 ./preparefortests.sh --gf # 输出unknown parameter hello ./preparefortests.sh hello
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

