7

我需要检查一个数字是否是偶数。

这是我尝试过的。

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)

4

9 回答 9

9

Nici 是对的,“%”是模数,并为您提供除法的余数。

您的脚本可以简化如下:

if [[ $((var % 2)) -eq 0 ]];
   then echo "$var is even"; 
   else echo "$var is odd"; 
fi
于 2013-07-31T07:49:32.620 回答
6

你可以做一个简单的:

eCheck=$(( $newY & 1 ))

在 bash 中使用位运算符。

于 2013-07-31T09:36:01.793 回答
2

%运算符计算余。也是281 % 21因为281除以余数21140

于 2013-07-31T03:00:21.997 回答
2
#!/usr/bin/env bash

[[ $( expr $1 % 2 ) -eq 0 ]] && echo "Even Number" || echo "Odd Number"
于 2019-02-10T18:09:29.287 回答
1

你是如此接近!像这样想。表达式中的 Y 只有两个可能的答案

Y = X % 2

对于 X 的所有值。它们是什么?玩一些 X 的值,看看你能不能得出 Y 的值。

接下来,您是否可以确定 Y 的值对 X 的值有何影响?也就是说,你能用 Y 的值来回答你试图解决的问题吗?

于 2013-07-31T03:42:14.487 回答
0

由于此问题被标记为 Bash,因此检查数字是否在 Bash 中的正确方法是:

if ((num%2 == 0)); then
    echo "The number is even"
fi

或者,更短:

if ((num % 2)); then
    echo "The number is even"
fi

我们不需要[[ ... ]]在这种情况下使用。


也可以看看:

于 2019-12-17T06:13:24.747 回答
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
于 2019-12-17T05:51:03.747 回答
0
#!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
于 2017-02-18T14:56:31.893 回答
0

这可以使用 expr 来完成

evenCheck=$(expr $newY % 2)
if [ $evenCheck = 0 ] ;
    then echo "number is even"; 
else echo "number is odd";
fi 
done
于 2018-02-27T11:43:49.550 回答