为什么我的bash脚本的输出没有达到预期

  • 本文关键字:脚本 bash 输出 bash shell
  • 更新时间 :
  • 英文 :


我想写一个shell脚本(bash(来完成以下任务:

脚本应该打印执行时传递的所有参数,即CCD_ 1。

我写了以下几行代码,希望它能像预期的那样工作:

#!/bin/bash
param="$@"
for value in $param
do
if [ $((value % 2)) -ne 0 ] && [ $((value)) -gt 66 ] || [ $((value)) -le 88 ]
then
echo "$value"
fi
done

但是,我没有得到任何错误,脚本没有过滤参数以查找上述标准,而是打印执行时传递的任何参数。我应该在if-statement上加括号吗?还是有什么地方我忽略了?

提前谢谢,我很感激任何建议:(

edit:我意识到这个问题毫无意义,因为条件uneven number AND greater than 66 OR less or equal to 88似乎基本上包括任何奇数,无论其大小。我很抱歉造成这种混乱,我想我的教授只是想让我们练习写shell脚本。

感谢@Ted Lyngmo的建议。

#!/bin/bash
param=("$@")                # assign an array to param
for value in "${param[@]}"  # loop over the values in the array
do
# use arithmetic expansion all the way for your condition:
if (( (value % 2 != 0 && value > 66) || (value % 2 != 0 && value <= 88) ))
then
echo "$value"
fi
done

我假设您想要(uneven numbers AND greater than 66) OR (even numbers that are less than or equal to 88)是因为所做的注释。也就是说,范围:

  • [-∞, 66],如果偶数
  • [67, 88]
  • [89, +∞],如果奇数

代码中的注释:

#!/bin/bash
param=("$@")                # assign an array to param
for value in "${param[@]}"  # loop over the values in the array
do
# use arithmetic expansion all the way for your condition:
if (( (value % 2 != 0 && value > 66) || (value % 2 == 0 && value <= 88) ))
then
echo "$value"
fi
done

相关内容

  • 没有找到相关文章

最新更新