【发布时间】:2021-09-14 17:46:21
【问题描述】:
我正在尝试编写一个仅在满足某些条件时才运行 R 脚本的命令。
条件聚类如下(这是假数据,但问题是一样的):
- 如果第一个参数 ($1) 包含 dog 并且第二个参数 ($2) > 10,则运行 old.R 脚本
- 如果 $1 包含 cat AND $2 > 12,则运行 old.R 脚本
我尝试了两种方法:
方法一:
if [[ $1 =~ dog ]] && [ $2 -gt 10 ]] || if [[ $1 =~ cat ]] && [ $2 -gt 12 ]];
then
Rscript elderly.R
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
如何子集前 2 和后两个 if 参数?
现在,方法 1 正在读取它,好像第一个参数是 dog OR cat 并且年龄大于 10,运行 R 脚本。但是,方法 2 时不输出任何内容
./test.sh cat 13
正在运行。 (test.sh 只是脚本名称的占位符)
感谢所有帮助!
【问题讨论】:
-
一个想法是使用括号对条件进行分组,例如:
if ( [[ $1 ... ]] && [ $2 ... ] ) || ( [[ $1 ... ]] && [ $2 ... ] ) -
现在试试 - 谢谢!您知道为什么方法 2 不起作用吗?我不确定 elif 失败的原因。
-
我猜这与单前括号 (
[) 和双尾括号 (]]) 的不匹配有关......你应该有单前导/尾随,或双领先/落后,但不是混合;您使用哪一个(单对双)取决于外壳以及您测试的方式/内容;将您的代码(使用适当的 shebang)剪切/粘贴到 shellcheck.net 中应该会突出显示语法问题 -
@markp-fuso 成功了!谢谢你的资源
标签: bash if-statement logic