我试图编写一个命令,只在满足某些条件的情况下运行R脚本。
这些条件聚在一起如下(这是假数据,但问题是相同的):
我尝试过两种方法:
方法1:
if [[ $1 =~ dog ]] && [ $2 -gt 10 ]] || if [[ $1 =~ cat ]] && [ $2 -gt 12 ]];
then
Rscript elderly.R
fi方法2:
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在下列情况下不输出任何内容
./test.sh cat 13都跑了。(test.sh只是脚本名的占位符)
任何和所有的帮助都是感激的!
发布于 2021-09-14 23:58:43
考虑写一些简短的函数来帮助你:
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或者,减少重复
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你错过了什么:太多的如果;没有足够的分组
if ([[ $1 =~ dog ]] && [ $2 -gt 10 ]) || ([[ $1 =~ cat ]] && [ $2 -gt 12 ]);
# ^................................^ ^................................^ https://stackoverflow.com/questions/69182361
复制相似问题