Cara membuat pernyataan yang memeriksa apakah ada sesuatu yang dapat dibagi oleh sesuatu yang lain tanpa sisa (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

pernyataan if [$ number] adalah apa yang saya tidak tahu cara mengaturnya

John T
sumber
Selamat datang, Roger. Bisakah Anda membungkus kode dalam pertanyaan Anda dalam tag kode (atau gunakan tombol kode pada editor)? Itu membuat banyak hal lebih mudah dibaca.
Telemachus

Jawaban:

39

Anda dapat menggunakan sintaks yang lebih sederhana di Bash daripada beberapa yang lain yang ditampilkan di sini:

#!/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
Dijeda sampai pemberitahuan lebih lanjut.
sumber
Terima kasih! Saya tahu pasti ada cara yang lebih sederhana tetapi tidak berhasil. bash scripting selalu menjadi seni hitam bagiku.
quack quixote
Ini akan menghasilkan pesan kesalahan, "((:: 08: nilai terlalu bagus untuk basis (token kesalahan adalah" 08 ")" dan "((: 09: nilai terlalu bagus untuk basis (token kesalahan adalah" 09 ")" lihat ubuntuforums.org/showthread.php?t=677751 untuk penjelasan
Red Cricket
@RedCricket: Hanya jika Anda memasukkan nol di depan. Jika itu masalah, Anda dapat melakukan: if (( 10#$number % 5 == 0 ))untuk memaksa $numberditafsirkan sebagai basis 10 (bukan basis 8 / oktal yang tersirat oleh nol di depan).
Dijeda sampai pemberitahuan lebih lanjut.
@ Deni Williamson Ya itu lebih akurat. Terima kasih! :)
Red Cricket
11

Tidak perlu bc selama itu bilangan bulat matematika (Anda akan membutuhkan bc untuk floating point): Dalam bash, operator (()) bekerja seperti expr .

Seperti orang lain telah menunjukkan operasi yang Anda inginkan adalah 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
quack quixote
sumber
3

Bagaimana dengan menggunakan bcperintah:

!/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
Nagul
sumber
1
Atau, Anda bisa menggunakan expr bukannya bc: sisa =expr $number % $divisor
Dan Dyer
@Dan Ya itu sudah cukup untuk OP. Namun, saya pikir karena bcberspesialisasi dalam perhitungan, ia dapat menangani hal-hal seperti 33,3% 11,1 yang exprkemungkinan akan mencekik.
nagul
pasti akan tersedak; expr dan (()) hanya menangani matematika integer.
Quack quixote
3

Jawaban Nagul bagus, tetapi hanya fyi, operasi yang Anda inginkan adalah modulus (atau modulo) dan operator umumnya %.

Telemakus
sumber
1

Saya telah melakukannya dengan cara yang berbeda. Periksa apakah itu bekerja untuk Anda.
Contoh 1 :

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

Contoh 2:

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

Logika sederhana.

12/3 = 4
4 * 3 = 12 -> nomor yang sama

11/3 = 3
3 * 3 = 9 -> bukan angka yang sama

wajah tersenyum
sumber
0

Hanya untuk kepentingan netralitas sintaksis dan memperbaiki bias notasi infiks terbuka di sekitar bagian-bagian ini, saya telah memodifikasi solusi nagul untuk digunakan 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
Eroen
sumber
Saya menyadari bahwa ini adalah pertanyaan yang sangat lama tetapi saya memiliki pertanyaan tentang kode tersebut. Saya relatif baru di bash dan baru mencoba menjalankan skrip ini. Namun itu memberi saya beberapa kesalahan dan saya jujur ​​tidak tahu kenapa. Setelah memasukkan nomor dan pembagi saya mendapatkan: test.sh: 7: test.sh: dc: tidak ditemukan Sisa: test.sh: 10: [: operator yang tak terduga "Nomor Anda tidak dapat dibagi oleh 2" Apakah Anda tahu mengapa ?
AreusAstarte
1
@AreusAstarte: Ini berarti Anda belum dcmenginstal.
Dijeda sampai pemberitahuan lebih lanjut.
0

Anda juga bisa menggunakan exprseperti:

#!/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
Kriket Merah
sumber