检查一个数字是否在shell中

时间:2013-07-31 02:53:48

标签: linux bash math ubuntu

我需要检查数字是否均匀。

这是我尝试过的。

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)

9 个答案:

答案 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 % 21,因为281除以2140,其余为 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

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


另请参阅: