Bir şeyin kalanı olmayan başka bir şey tarafından bölünebilir olup olmadığını kontrol eden bir ifade nasıl yapılır (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] ifadesi nasıl kurulacağını bilmiyorum


Hoşgeldin Roger. Lütfen sorunuzdaki kodu kod etiketlerine sarabilir misiniz (veya editördeki kod düğmesini kullanın)? İşleri okumayı çok kolaylaştırıyor.
Telemachus

Yanıtlar:


39

Bash'te burada gösterilen diğerlerinden daha basit bir sözdizimi kullanabilirsiniz:

#!/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

Teşekkürler! Daha basit bir yol olması gerektiğini biliyordum ama şansım yaver gitmedi. bash betiği benim için her zaman biraz siyah bir sanat olmuştur.
quack quixote

Bu, "((: 08: değer taban için çok büyük (hata belirteci" 08 ")" ve "((: 09: temel için çok büyük değer (hata belirteci" 09 "))" hata iletisine neden olur. açıklama için ubuntuforums.org/showthread.php?t=677751
Red Cricket

@RedCricket: Yalnızca baştaki sıfırı girerseniz. Bu bir sorunsa, şunları yapabilirsiniz: üs 10 olarak yorumlanmaya if (( 10#$number % 5 == 0 ))zorlamak $numberiçin (baştaki sıfır tarafından ima edilen üs 8 / sekizlik yerine).
sonraki duyuruya kadar duraklatıldı.

@Deniis Williamson Evet bu daha doğru. Teşekkürler! :)
Kırmızı Kriket

11

Tam sayı matematiği olduğu sürece bc'ye gerek yok (kayan nokta için bc'ye ihtiyacınız olacak): bash'ta (()) operatörü, expr gibi çalışır .

Diğerlerinin de belirttiği gibi, istediğiniz işlem modulo (%) .

#!/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

bcKomutu kullanmaya ne dersiniz :

!/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
Alternatif olarak, bc yerine expr kullanabilirsiniz: remainder =expr $number % $divisor
Dan Dyer

@Dan Evet OP için yeterli olmalı. Bununla birlikte, bchesaplamalarda uzmanlaştığı için, exprmuhtemelen boğulacak olan% 33.3% 11.1 gibi şeylerle başa çıkabileceğini düşünüyorum .
nagul

kesinlikle boğulacaktı; ifade ve (()) yalnızca tamsayı matematiğini işler.
quack quixote

3

Nagul'un cevabı harika, ama sadece, istediğiniz işlem modül (veya modulo) ve operatör genellikle %.


1

Bunu farklı bir şekilde yaptım. İşe yarayıp yaramadığını kontrol et.
Örnek 1 :

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

Örnek 2:

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

Basit bir mantık.

12/3 = 4
4 * 3 = 12 -> aynı numara

11/3 = 3
3 * 3 = 9 -> aynı numara değil


0

Sözdizimi nötrlüğünün ve bu kısımların etrafındaki açık uçlu gösterim önyargısını düzeltmek adına, nagul'ün kullanacağı çözümü değiştirdim 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

Bunun gerçekten eski bir soru olduğunu biliyorum ama kodla ilgili bir sorum var. Ben bash için nispeten yeni ve sadece bu komut dosyasını çalıştırmaya çalıştı. Ancak bana birkaç hata veriyor ve dürüstçe nedenini bilmiyorum. Numarayı ve böleni girdikten sonra alıyorum: test.sh: 7: test.sh: dc: bulunamadı: Kalan: test.sh: 10: [: beklenmedik operatör “Numaranız 2'ye bölünemiyor” Nedenini biliyor musunuz? ?
AreusAstarte

1
@AreusAstarte: Takmadığınız anlamına gelir dc.
sonraki duyuruya kadar duraklatıldı.

0

Ayrıca exprböyle kullanabilirsiniz :

#!/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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.