我想写一个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