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