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