我需要检查数字是否均匀。
这是我尝试过的。
newY="281"
eCheck=$(( $newY % 2 ))
echo $newY
echo $eCheck
while [ $eCheck -eq 0 ]; do
newY=$((newY-1))
eCheck=$(( $newY % 2 ))
echo $newY
done
...
返回eCheck = 1
怎么会这样? 281/2 = 140.5
我也尝试过使用bc
,但它进入了无限循环eCheck=$(echo "scale=1;$newY%2" | bc)
答案 0 :(得分:6)
你可以做一个简单的事情:
eCheck=$(( $newY & 1 ))
在bash中使用按位运算符。
答案 1 :(得分:5)
Nici是对的,“%”是模数,并为您提供除法的其余部分。
您的脚本可以简化如下:
if [[ $((var % 2)) -eq 0 ]];
then echo "$var is even";
else echo "$var is odd";
fi
答案 2 :(得分:2)
%
运算符计算余数。因此281 % 2
为1
,因为281
除以2
为140
,其余为 1 。
答案 3 :(得分:1)
你真是太近了!想想这样。表达式
中只有两个可能的答案Y = X % 2
表示X的所有值。它们是什么?使用一些X值进行游戏,看看你是否可以拿出Y的值。
接下来,有什么可以确定Y的值对X值的影响吗?也就是说,你能用Y的值来回答你想要解决的问题吗?
答案 4 :(得分:1)
#!bin/bash
echo "Type the input integer, followed by [Enter]:"
read x
if [ $((x%2)) -eq 0]; then
echo "$x is even"
else
echo "$x is odd"
fi
Yes "%" is modulo, it gives you the remainder, like others have mentioned
Thought this answer might be helpful to new linux users
答案 5 :(得分:0)
这可以使用expr
完成evenCheck=$(expr $newY % 2)
if [ $evenCheck = 0 ] ;
then echo "number is even";
else echo "number is odd";
fi
done
答案 6 :(得分:0)
#!/usr/bin/env bash
[[ $( expr $1 % 2 ) -eq 0 ]] && echo "Even Number" || echo "Odd Number"
答案 7 :(得分:0)
正如您提到的,您甚至在检查是否为单号,因此无需使用循环。这是我的一些代码。
read -p "Enter a number: " num
if [ $((num%2)) -eq 0 ]
then
echo "Entered Number is even:"
else
echo "Entered Number is odd:"
fi
答案 8 :(得分:0)
由于此问题被标记为Bash,所以检查Bash中的数字是否为偶数的正确方法是:
if ((num%2 == 0)); then
echo "The number is even"
fi
或更短:
if ((num % 2)); then
echo "The number is even"
fi
在这种情况下,我们不需要使用[[ ... ]]
。
另请参阅: