何かが余りなく他の何かによって割り切れるかどうかをチェックするステートメントを作成する方法(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]ステートメントは設定方法がわからないものです


ようこそ、ロジャー。あなたの質問のコードをコードタグでラップしてください(またはエディターのコードボタンを使用してください)?それは物事が作るたくさん読みやすいです。
テレマコス

回答:


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スクリプトは、私にとって常にちょっとした黒魔術でした。
いんちきのキホーテ

これにより、エラーメッセージ、「((:08:value too great for base(error token is "08")」」および「((:09:value too great for base(error token is "09")」を参照してください。説明についてはubuntuforums.org/showthread.php?t=677751
レッドクリケット

@RedCricket:先行ゼロを入力した場合のみ。それが問題である場合は、次を行うことができます:(先頭のゼロによって暗示される8進数/ 8進数の代わりに)10進数として解釈されるようif (( 10#$number % 5 == 0 ))に強制$numberします。
追って通知があるまで一時停止します。

@Deniis Williamsonはい、それはより正確です。ありがとう!:)
レッドクリケット

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
または、bcの代わりにexprを使用することもできます。remaining =expr $number % $divisor
Dan Dyer

@Danはい、OPで十分です。ただし、bc計算に特化しているため、33.3%11.1のようなものを処理できexprます。
nagul

間違いなく窒息するでしょう。exprおよび(())は整数演算のみを処理します。
いんちきのキホーテ

3

Nagulの答えは素晴らしいですが、ただfyi、あなたが望む操作はモジュラス(またはモジュロ)であり、演算子は一般に%です。


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:not found ?
AreusAstarte

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.