Làm thế nào để đưa ra một tuyên bố kiểm tra nếu một cái gì đó chia hết cho một thứ khác mà không có phần còn lại (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

câu lệnh if [$ number] là những gì tôi không biết cách thiết lập


Chào mừng, Roger. Bạn có thể vui lòng bọc mã trong câu hỏi của bạn trong các thẻ mã (hoặc sử dụng nút mã trên trình chỉnh sửa)? Nó làm cho mọi thứ dễ đọc hơn rất nhiều .
Telemachus

Câu trả lời:


39

Bạn có thể sử dụng một cú pháp đơn giản hơn trong Bash so với một số cú pháp khác được hiển thị ở đây:

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

cảm ơn! tôi biết rằng phải có một cách đơn giản hơn nhưng không gặp may mắn. bash scripting luôn là một nghệ thuật đen đối với tôi.
quack quixote

Điều này sẽ dẫn đến thông báo lỗi, "((: 08: giá trị quá lớn cho cơ sở (mã thông báo lỗi là" 08 ")" và "((: 09: giá trị quá lớn cho cơ sở (mã thông báo lỗi là" 09 ")" xem ubuntuforums.org/showthread.php?t=677751 để giải thích.
Red Cricket

@RedCricket: Chỉ khi bạn nhập số 0 đứng đầu. Nếu đó là một vấn đề, bạn có thể làm: if (( 10#$number % 5 == 0 ))buộc $numberphải được hiểu là cơ sở 10 (thay vì cơ sở 8 / bát phân được ngụ ý bởi số 0 đứng đầu).
Tạm dừng cho đến khi có thông báo mới.

@Deniis Williamson Vâng, điều đó chính xác hơn. Cảm ơn! :)
Dế đỏ

11

Không cần bc miễn là toán học số nguyên (bạn sẽ cần bc cho dấu phẩy động): Trong bash, toán tử (()) hoạt động như expr .

Như những người khác đã chỉ ra thao tác bạn muốn là 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

Làm thế nào về việc sử dụng bclệnh:

!/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
Ngoài ra, bạn có thể sử dụng expr thay vì bc: remainder =expr $number % $divisor
Dan Dyer

@Dan Có nó nên đủ cho OP. Tuy nhiên, tôi nghĩ vì bcchuyên về tính toán, nó có thể xử lý những thứ như 33,3% 11,1 có exprthể sẽ bị sặc.
nagul

chắc chắn sẽ nghẹt thở; expr và (()) chỉ xử lý toán học số nguyên.
quack quixote

3

Câu trả lời của Nagul là tuyệt vời, nhưng chỉ cần fyi, hoạt động bạn muốn là mô đun (hoặc modulo) và nói chung người vận hành %.


1

Tôi đã làm nó theo một cách khác. Kiểm tra nếu nó làm việc cho bạn.
Ví dụ 1 :

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

Ví dụ 2:

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

Logic đơn giản.

12/3 = 4
4 * 3 = 12 -> cùng số

11/3 = 3
3 * 3 = 9 -> không cùng số


0

Chỉ vì lợi ích của tính trung lập cú pháp và sửa đổi sai lệch ký hiệu công khai xung quanh các phần này, tôi đã sửa đổi giải pháp của nagul để sử dụng 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

Tôi nhận ra rằng đây là một câu hỏi thực sự cũ nhưng tôi có một câu hỏi về mã. Tôi còn khá mới với bash và chỉ cố chạy tập lệnh này. Tuy nhiên, nó mang lại cho tôi một vài lỗi và tôi thực sự không biết tại sao. Sau khi nhập số và số chia tôi nhận được: test.sh: 7: test.sh: dc: không tìm thấy Phần còn lại: test.sh: 10: [: toán tử không mong đợi Số của bạn không chia hết cho 2 ?
AreusAstarte

1
@AreusAstarte: Có nghĩa là bạn chưa dccài đặt.
Tạm dừng cho đến khi có thông báo mới.

0

Bạn cũng có thể sử dụng exprnhư vậy:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.