"26행: '완료' 표시 근처에 예기치 않은 구문 오류가 있습니다."라는 오류가 발생하는 이유는 무엇입니까?

"26행: '완료' 표시 근처에 예기치 않은 구문 오류가 있습니다."라는 오류가 발생하는 이유는 무엇입니까?
for (( i=1; i<= $numberstudent; i++ ))
     do
      head -n $i fullstudentsMarks | tail -n 1 > $(cut -f 2 -d ' ')
      npassed=0
      sum=0
      average=0
      for (( j=3; j<= 10; j++ ))
      do
        mark=$(cut -f $j -d ' ' $(cut -f 2 -d ' ' fullstudentsMarks))
        if ($mark>=60)
        then
         $npassed=$npassed+1
        fi
        $sum=$sum+mark
      done
      $average=$sum / $npassed
      if ($npassed==8);then
       result="successful"
      else if ($npassed>=5);then
        result="trans"
      else
       result="lost"
      fi
      idstudent=$(head -n $i fullstudentsMarks | tail -n 1 | cut -f 1 -d ' ')
      echo $idstudent+" "+$reslut+" "+$average >> resandavg
     done

답변1

스크립트를 붙여넣으세요.주택 검사. 이는 올바르지 않은 코드 부분을 지적하는 많은 오류 메시지를 제공합니다.

하지만 절대 거기까지 가면 안 됩니다. 이 줄을 작성하기 전에 스크립트를 수십 번 테스트해야 합니다 $average=$sum / $npassed.

일반적으로 어떤 종류의 프로그래밍을 할 때, 모든 것을 작성한 후에 프로그램이 완벽하게 작동할 것이라고 기대하면서 테스트가 끝날 때까지 기다리지 마십시오. 코드를 작성하면서 단계별로 테스트하는 것이 가장 좋습니다. 쉘 스크립트를 사용하는 것은 컴파일 단계가 없기 때문에 특히 쉽습니다.

아무도적당히 복잡한 논리를 포함하고 첫 번째 시도에서 올바르게 구문 분석하는 완전한 쉘 스크립트를 작성하십시오(그렇다면 운이 좋고 놀랄 수도 있습니다).

예를 들어 다음에서 시작할 수 있습니다.

for (( i = 1; i <= numberstudent; i++ )); do
  echo "$i"
done

효과적인가요? 왜 안 돼? 글쎄, numberstudent가치가 없어. 지금이 23시라고 가정하자.

그런 다음 추가하나새 줄을 바꾸고 다시 테스트하세요.

numberstudent=23
for (( i = 1; i <= numberstudent; i++ )); do
  head -n "$i" fullstudentsMarks | tail -n 1 > $(cut -f 2 -d ' ')
done

거기서 무슨 일이 일어 났어? "해당 파일이나 디렉터리가 없습니다." 또는 "모호한 리디렉션"이 나타나는 이유는 무엇입니까? 이 줄이 정확히 무엇을 하길 원하는가? 좋습니다. 한 번에 스크립트에 너무 많은 항목이 추가되었으므로 삭제하겠습니다.

numberstudent=23
for (( i = 1; i <= numberstudent; i++ )); do
  head -n "$i" fullstudentsMarks | tail -n 1
done

$i이제 out of에 해당하는 행을 선택하여 fullstudentsMarks표시합니다. (이것이 당신의 것인지 모르겠습니다.실제로고의로)

하지만 아, numberstudent파일의 줄 수여야 합니다! 좋아요

numberstudent="$( wc -l <fullstudentsMarks )" 
for (( i = 1; i <= numberstudent; i++ )); do
  head -n "$i" fullstudentsMarks | tail -n 1
done

그리고 모든 줄이 원하는 작업을 수행하는 스크립트가 있을 때까지, 그리고 그것이 올바르게 수행되고 있음을 알 때까지(그리고 추가하는 거의 모든 줄 후에 스크립트를 테스트하기 때문에 그렇게 한다는 것을 알 때까지) 계속됩니다.

관련 정보