Bash多分组条件if语句编写:满足指定规则时执行R脚本
问题原因分析
方法1错误点
- 语法错误:
[[ $1 =~ dog ]] && [ $2 -gt 10 ]]多了一个闭合的中括号],会直接触发语法报错 - 逻辑优先级问题:没有给两个独立的条件组加包裹标识,Bash会按默认运算符优先级依次判断,最终运行逻辑和需求不符
方法2无输出的常见原因
- 缺少参数合法性校验:如果没有先判断是否传入了2个有效参数,
$2为空时数值判断会直接报错,且不会进入任何分支 [和[[混用的兼容问题,未对参数做边界校验,特殊场景下会触发判断异常
正确实现方案
方案1:单if多条件组写法(最简洁)
用双中括号统一判断逻辑,用括号明确条件组优先级,避免语法混乱:
#!/bin/bash # 先校验参数数量和第二个参数是否为正整数 if [[ $# -ne 2 || ! $2 =~ ^[0-9]+$ ]]; then echo "用法:$0 <关键词> <年龄数值>" exit 1 fi if [[ ( $1 =~ dog && $2 -gt 10 ) || ( $1 =~ cat && $2 -gt 12 ) ]]; then Rscript elderly.R else echo "parameters not in range" fi
方案2:分支判断写法(兼容你原来的方法2逻辑,修复已知问题)
#!/bin/bash # 参数校验 if [[ $# -ne 2 || ! $2 =~ ^[0-9]+$ ]]; then echo "用法:$0 <关键词> <年龄数值>" exit 1 fi if [[ $1 =~ dog && $2 -gt 10 ]]; then Rscript elderly.R elif [[ $1 =~ cat && $2 -gt 12 ]]; then Rscript elderly.R else echo "parameters not in range" fi
验证测试
执行以下命令会正常运行R脚本:
./test.sh dog 11./test.sh mycat 13
执行以下命令会输出参数不在范围内:./test.sh dog 10./test.sh cat 12./test.sh pig 20
内容的提问来源于stack exchange,提问作者NotLostExploring
相关产品推荐
相关产品推荐

