วิธีสร้างข้อความสั่งที่ตรวจสอบว่ามีบางสิ่งที่หารด้วยอย่างอื่นโดยไม่เหลือ (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

คำตอบ:


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 เป็นงานศิลปะสีดำสำหรับฉันมาตลอด
ต้มตุ๋น Quixote

สิ่งนี้จะส่งผลให้เกิดข้อความแสดงข้อผิดพลาด "((: 08: ค่ามากเกินไปสำหรับฐาน (โทเค็นข้อผิดพลาดคือ" 08 ")" และ "((: 09: ค่าดีเกินไปสำหรับฐาน (โทเค็นข้อผิดพลาดคือ" 09 ")" เห็นubuntuforums.org/showthread.php?t=677751สำหรับคำอธิบาย
Red Cricket

@RedCricket: เฉพาะเมื่อคุณป้อนศูนย์นำหน้า หากเป็นปัญหาคุณสามารถทำได้: if (( 10#$number % 5 == 0 ))เพื่อบังคับ$numberให้ตีความเป็นฐาน 10 (แทนที่จะเป็นฐาน 8 / ฐานแปดโดยนัยจากศูนย์นำหน้า)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

@Deniis Williamson ใช่นั่นแม่นยำกว่า ขอบคุณ! :)
Red Cricket

11

ไม่มีBCจำเป็นตราบเท่าที่มันของคณิตศาสตร์จำนวนเต็ม (คุณจะต้อง BC จุดแม้ว่าลอย): ในทุบตีที่(())ผู้ประกอบการทำงานเหมือน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: คงเหลือ =expr $number % $divisor
Dan Dyer

@ แดนใช่มันควรจะเพียงพอสำหรับ OP อย่างไรก็ตามฉันคิดว่าตั้งแต่bcมีความเชี่ยวชาญในการคำนวณมันสามารถจัดการสิ่งต่าง ๆ เช่น 33.3% 11.1 ซึ่งexprน่าจะทำให้หายใจไม่ออก
nagul

จะทำให้หายใจไม่ออกอย่างแน่นอน expr และ (()) จัดการเลขจำนวนเต็มเท่านั้น
ต้มตุ๋น Quixote

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

ฉันรู้ว่านี่เป็นคำถามที่เก่ามาก แต่ฉันมีคำถามเกี่ยวกับรหัส ฉันค่อนข้างใหม่ในการทุบตีและพยายามเรียกใช้สคริปต์นี้ อย่างไรก็ตามมันทำให้ฉันมีข้อผิดพลาดเล็กน้อยและฉันก็ไม่รู้เหมือนกันว่าทำไม หลังจากป้อนตัวเลขและตัวหารฉันได้รับ: test.sh: 7: test.sh: dc: ไม่พบส่วนที่เหลือ: test.sh: 10: [: ผู้ประกอบการที่ไม่คาดคิด "หมายเลขของคุณไม่หารด้วย 2" คุณมีความคิดว่าทำไม ?
AreusAstarte

1
@AreusAstarte: หมายความว่าคุณยังไม่ได้dcติดตั้ง
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.