Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 检查shell中的数字是否为偶数_Bash_Math - Fatal编程技术网

Bash 检查shell中的数字是否为偶数

Bash 检查shell中的数字是否为偶数,bash,math,Bash,Math,我需要检查一个数字是否为偶数 这是我试过的 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,但它进入了一个无限循环eChe

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

这是我试过的

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)
操作符计算剩余部分。所以
281%2
就是
1
,因为
281
除以
2
就是
140
,剩下的1

你离得太近了!这样想吧。表达式中Y只有两个可能的答案

Y = X % 2
对于X的所有值,它们是什么?玩一些X的值,看看你是否能得出Y的值

接下来,你能确定Y的值代表X的值吗?也就是说,你能用Y的值来回答你试图解决的问题吗?

Nici是对的,“%”是模,并给出除法的剩余部分

您的脚本可以简化如下:

if [[ $((var % 2)) -eq 0 ]];
   then echo "$var is even"; 
   else echo "$var is odd"; 
fi
您可以执行以下简单操作:

eCheck=$(( $newY & 1 ))

要在bash中使用按位运算符,可以使用expr

#!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
evenCheck=$(expr $newY % 2)
if [ $evenCheck = 0 ] ;
    then echo "number is even"; 
else echo "number is odd";
fi 
done

正如您提到的,您正在检查单个no,因此不需要使用循环。这是我的代码

read -p "Enter a number: " num
if [ $((num%2)) -eq 0 ]
then
  echo "Entered Number is even:"
else
  echo "Entered Number is odd:"
fi

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

if ((num%2 == 0)); then
    echo "The number is even"
fi
或者更简短地说:

if ((num % 2)); then
    echo "The number is even"
fi
在这种情况下,我们不需要使用
[[…]]


另见:

  • (在Unix和Linux堆栈交换上)

+1用于定义明确的问题并尝试解决它!。打开shell调试,您将很快看到哪里有问题。使用文件顶部附近的
set-vx
。Good luck.Expression,$(expo$1%2)表达式前面的$符号将表达式指定为一个变量和提要以进行比较$1:用于访问作为bash filename.sh 1传递的参数。(expr$1%2)对脚本上传递的参数($1)进行数学计算。2.($(expr$1%2)-eq 0)这里-eq表示等于,并检查余数是否为零。在数学计算之前做一个$符号,将余数作为反馈反馈反馈给下一个执行的命令。3. && 是二进制文件及其在条件语句为true之前执行的iff。4. || 是二进制还是,如果之前的条件语句为false,它将执行。这似乎是重复的,或者您的答案与Harpreet Khanduja的答案或Harpreet Khanduja的答案有什么不同?在Harpreet one中,您可能会得到错误的输出,您只需要替换-eq 0];至-eq 0]。“0和括号之间的空格”。此答案中存在语法错误。正确的检查方法是:
if((x%2==0));然后…
。虽然这段代码可以为这个问题提供一个解决方案,但最好添加上下文来说明为什么/如何工作。这可以帮助未来的用户学习,并将这些知识应用到他们自己的代码中。在解释代码时,用户可能会以投票的形式向您提供正面反馈。您根本不需要
[…]]
。只要
(…)
就行了<代码>如果((变量%2==0));然后…。
if ((num % 2)); then
    echo "The number is even"
fi