首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于多个群集条件的Bash if Bash语句

对于多个群集条件的Bash if Bash语句
EN

Stack Overflow用户
提问于 2021-09-14 17:46:21
回答 1查看 79关注 0票数 0

我试图编写一个命令,只在满足某些条件的情况下运行R脚本。

这些条件聚在一起如下(这是假数据,但问题是相同的):

  1. 如果第一个参数( $1 )包含狗,第二个参数( $2 ) > 10,运行elderly.R脚本
  2. 如果$1包含cat,$2> 12,运行elderly.R脚本

我尝试过两种方法:

方法1:

代码语言:javascript
复制
if [[ $1 =~ dog ]] && [ $2 -gt 10 ]] || if [[ $1 =~ cat ]] && [ $2 -gt 12 ]]; 
then 
Rscript elderly.R
fi

方法2:

代码语言:javascript
复制
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和第二个如果参数?

现在,方法1正在读取它,好像第一个参数是狗或猫,并且年龄大于10,运行R脚本。但是,方法2在下列情况下不输出任何内容

代码语言:javascript
复制
./test.sh cat 13

都跑了。(test.sh只是脚本名的占位符)

任何和所有的帮助都是感激的!

EN

回答 1

Stack Overflow用户

发布于 2021-09-14 23:58:43

考虑写一些简短的函数来帮助你:

代码语言:javascript
复制
old_dog () {
    [[ $1 == dog ]] && (($2 > 10))
}
old_cat () {
    [[ $1 == cat ]] && (($2 > 12))
}

if old_dog "$@" || old_cat "$@"; then
    Rscript elderly.R
else
    echo "parameters not in range"
fi

或者,减少重复

代码语言:javascript
复制
old_animal () {
    case $1 in
        dog) (($2 > 10)) ;;
        cat) (($2 > 12)) ;;
        *)   false ;;
    esac
}

if old_animal "$@"; then
    Rscript elderly.R
else
    echo "parameters not in range"
fi

你错过了什么:太多的如果;没有足够的分组

代码语言:javascript
复制
if ([[ $1 =~ dog ]] && [ $2 -gt 10 ]) || ([[ $1 =~ cat ]] && [ $2 -gt 12 ]);
#  ^................................^    ^................................^ 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69182361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档