如何发表声明以检查某物是否可被其他物整除(BASH)


21
#!/bin/bash


Echo Enter a number

Read  $number

If [$number ] ; then 

Echo Your number is divisible by 5

Else

Echo Your number is not divisible by 5

fi

if [$ number]语句是我不知道如何设置的


欢迎,罗杰。您能否将问题中的代码包装在代码标签中(或使用编辑器上的代码按钮)?它使事情很多更容易阅读。
Telemachus

Answers:


39

您可以在Bash中使用比此处显示的其他语法更简单的语法:

#!/bin/bash
read -p "Enter a number " number    # read can output the prompt for you.
if (( $number % 5 == 0 ))           # no need for brackets
then
    echo "Your number is divisible by 5"
else
    echo "Your number is not divisible by 5"
fi

谢谢!我知道必须有一个简单的方法,但是没有运气。对我而言,bash脚本编写一直是一门妖术。
09年

这将导致错误消息“(((:08:值对于基数太大(错误令牌为“ 08”))“和”(((:09:值对基数太大(错误令牌为“ 09”))“ ubuntuforums.org/showthread.php?t=677751进行解释

@RedCricket:仅当您输入前导零时。如果这是一个问题,则可以执行以下操作:if (( 10#$number % 5 == 0 ))强制$number解释为以10为底(而不是前导零所隐含的以8为底/八进制)。
暂停,直到另行通知。

@Deniis Williamson是的,这更准确。谢谢!:)
Red Cricket

11

没有BC需要,只要它的整数运算(你需要BC浮点虽然):在bash中(())运算符的工作原理是EXPR

正如其他人指出的那样,您想要的运算是模(%)

#!/bin/bash  

echo "Enter a number"
read number

if [ $(( $number % 5 )) -eq 0 ] ; then
   echo "Your number is divisible by 5"
else
   echo "Your number is not divisible by 5"
fi

3

如何使用bc命令:

!/usr/bin/bash

echo Enter a number
read number
echo Enter divisor
read divisor
remainder=`echo "${number}%${divisor}" | bc`
echo "Remainder: $remainder"

if [ "$remainder" == "0" ] ; then
        echo Your number is divisible by $divisor
else
        echo Your number is not divisible by $divisor
fi

1
另外,您也可以使用expr代替bc:restder =expr $number % $divisor
Dan Dyer

@Dan是的,它足以满足OP的需要。但是,我认为,由于bc专门研究计算,因此它可以处理33.3%11.1之类的问题,expr可能会阻塞。
nagul

肯定会窒息;expr和(())仅处理整数数学。
quack quixote,09年

3

Nagul的答案很好,但仅供参考,您想要的运算是模(或模),运算符通常是%


1

我以不同的方式做到了。检查它是否适合您。
范例1:

num=11;
[ `echo $num/3*3 | bc` -eq $num ] && echo "is divisible" || echo "not divisible"
Output : not divisible

范例2:

num=12;
[ `echo $num/3*3 | bc` -eq $num ] && echo "is divisible" || echo "not divisible"
Output : is divisible

简单的逻辑。

12/3 = 4
4 * 3 = 12->相同的数字

11/3 = 3
3 * 3 = 9->不同的数字


0

只是出于语法中立的目的,并在这些部分周围添加明显的中缀表示法偏见,我修改了nagul的解决方案以使用dc

!/usr/bin/bash

echo Enter a number
read number
echo Enter divisor
read divisor
remainder=$(echo "${number} ${divisor}%p" | dc)
echo "Remainder: $remainder"

if [ "$remainder" == "0" ]
then
        echo Your number is divisible by $divisor
else
        echo Your number is not divisible by $divisor
fi

我意识到这是一个非常老的问题,但是我对代码有疑问。我对bash比较陌生,只是尝试运行此脚本。但是,这给了我一些错误,老实说,我也不知道为什么。输入数字和除数后,我得到:test.sh:7:test.sh:dc:找不到余数:test.sh:10:[:意外的运算符“您的数字不能被2整除”你知道为什么吗?
AreusAstarte 2014年

1
@AreusAstarte:这意味着您尚未dc安装。
暂停,直到另行通知。

0

您也可以expr这样使用:

#!/bin/sh

echo -n "Enter a number: "
read number
if [ `expr $number % 5` -eq 0 ]
then
    echo "Your number is divisible by 5"
else
    echo "Your number is not divisible by 5"
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.