2017-12-11 9 views
-3

쉘 스크립트를 처음 사용합니다. 나는 숫자가 소수인지 아닌지 날씨를 확인하는 함수를 작성했지만 if 조건에있는 단항 연산자의 오류가 발생했습니다. 친절하게 내가 실수 한 부분을 지적하십시오.쉘 스크립트의 소수 함수

파일 : fprime.sh

prime() 
{ 

     n=$1 
     t=0 
     for i in {2..$n} 
     do 
     r=`expr $n % $i` 
     if [ $r == 0 ] 
     then 
     t=`expr t + 1` 
     fi 
     done 
     if [ $t == 1 ] 
     then 
     echo "prime" 
     else 
     echo "not prime" 
     fi 
} 

prime 

출력 :

~$ ./fprime.sh 5 

expr: syntax error 
./fprime.sh: line 8: [: ==: unary operator expected 

하지 프라임

+3

쉘 구문 오류가 발생할 때마다 좋은 첫 번째 단계는 코드를 잘라내어 [shellcheck.net] (http://www.shellcheck.net/) 에 붙여 넣은 다음 오류를 수정하십시오) 및 경고 (중요 할 수도 있음)를 식별합니다. 메시지를 이해하는데 어려움이 있다면 여기로 와서 물어보십시오. – John1024

답변

1

3 곳, 너무 다른 구문 오류가 있습니다, 변경 시도

1) if [ $r == 0 ] 
    // to 
    if [ $r -eq 0 ] 

2) t=`expr t + 1` 
    // to 
    t=`expr $t + 1` 

3) if [ $t == 1 ] 
    // to 
    if [ $t -eq 1 ] 

노트

1)3)-eq는 문자열/charactor 발

2) 동일시 배시 ==의 정수를 동일시되어 사용된다 -에 대한 $ 심볼 놓친 변수 t

또한 단지 $1을 변수에 할당하지 않고 사용할 수 있습니다.다시

+0

당신이 제안한 변경 사항을 시도했지만 여전히 같은 오류가 발생했습니다. 우분투를 사용하고 있습니다. –

+0

문제가 해결되었습니다. 고맙습니다. 다음 변경 사항을 적용 : for ((i = 2; i <$ 1; i ++)); do r = $ ((1 % i)) –

+0

$ n은 중괄호로 사용할 수 없으며'expr'은이 경우 작동하지 않습니다. –