무언가가 나머지없이 다른 것으로 나눌 수 있는지 확인하는 진술을 만드는 법 (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 스크립팅은 항상 약간의 검은 예술이었습니다.
quck quixote

그러면 "((:: 08 : 기본 값이 너무 큽니다 (오류 토큰은"08 ")"및 "((:: 09 : 기본 값이 너무 큽니다 (오류 토큰은"09 ")) 오류 메시지가 표시됩니다. 설명을위한 ubuntuforums.org/showthread.php?t=677751
레드 크리켓

@RedCricket : 앞에 0을 입력 한 경우에만. 그 문제의 경우, 당신이 할 수있는 : if (( 10#$number % 5 == 0 ))강제로 $number기본 10으로 해석하는 (대신 기본 8 / 진수 선도 0으로 암시).
추후 공지가있을 때까지 일시 중지되었습니다.

@Deniis Williamson 더 정확합니다. 감사! :)
레드 크리켓

11

정수 수학이면 bc가 필요 하지 않습니다 (부동 소수점에는 bc가 필요합니다). bash에서 (()) 연산자는 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 사용할 수 있습니다expr $number % $divisor
댄 다이어

@ Dan 예, OP에는 충분합니다. 그러나 bc계산을 전문으로 하므로 33.3 % 11.1과 같은 물건을 처리 할 수 ​​있습니다 expr.
nagul

확실히 질식 할 것입니다. expr 및 (())은 정수 수학 만 처리합니다.
quack quixote

3

Nagul의 대답은 훌륭하지만, 단지 당신이 원하는 연산은 모듈러스 (또는 모듈로)이며 연산자는 일반적으로 %입니다.


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

나는 이것이 정말로 오래된 질문이라는 것을 알고 있지만 코드에 대한 질문이 있습니다. 나는 bash를 처음 접 했고이 스크립트를 실행하려고했습니다. 그러나 그것은 나에게 약간의 오류를 주었고 나는 솔직히 이유를 모른다. 숫자와 제수를 입력하면 다음과 같은 결과가 나타납니다. test.sh : 7 : test.sh : dc : 찾을 수 없음 나머지 : test.sh : 10 : [: 예기치 않은 연산자 "숫자는 2로 나눌 수 없습니다"왜 그런지 아십니까? ?
AreusAstarte

1
@AreusAstarte : dc설치되어 있지 않다는 의미 입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

0

다음 expr과 같이 사용할 수도 있습니다 .

#!/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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.