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 bracketsthen
echo "Your number is divisible by 5"else
echo "Your number is not divisible by 5"fi
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
!/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
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 %.
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
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
Jawaban:
Anda dapat menggunakan sintaks yang lebih sederhana di Bash daripada beberapa yang lain yang ditampilkan di sini:
sumber
if (( 10#$number % 5 == 0 ))
untuk memaksa$number
ditafsirkan sebagai basis 10 (bukan basis 8 / oktal yang tersirat oleh nol di depan).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 (%) .
sumber
Bagaimana dengan menggunakan
bc
perintah:sumber
expr $number % $divisor
bc
berspesialisasi dalam perhitungan, ia dapat menangani hal-hal seperti 33,3% 11,1 yangexpr
kemungkinan akan mencekik.Jawaban Nagul bagus, tetapi hanya fyi, operasi yang Anda inginkan adalah modulus (atau modulo) dan operator umumnya
%
.sumber
Saya telah melakukannya dengan cara yang berbeda. Periksa apakah itu bekerja untuk Anda.
Contoh 1 :
Contoh 2:
Logika sederhana.
12/3 = 4
4 * 3 = 12 -> nomor yang sama
11/3 = 3
3 * 3 = 9 -> bukan angka yang sama
sumber
Hanya untuk kepentingan netralitas sintaksis dan memperbaiki bias notasi infiks terbuka di sekitar bagian-bagian ini, saya telah memodifikasi solusi nagul untuk digunakan
dc
.sumber
dc
menginstal.Anda juga bisa menggunakan
expr
seperti:sumber