쉘 스크립트 - 이 'if'에 대해 'fi'를 찾을 수 없습니다.

쉘 스크립트 - 이 'if'에 대해 'fi'를 찾을 수 없습니다.

이 오류와 다른 여러 오류를 발견했습니다. 중첩이 좋지 않거나 for의 들여쓰기가 올바르지 않거나 세미콜론이 없는 것 같습니다. 어쨌든, 나는 오랫동안 그것을 알아내려고 노력했지만 성공하지 못했습니다. 코드는 다음과 같습니다.

if [ "${runcmd}" != "echo" ]; then
statusmsg "Kernels built from ${kernelconf}:"
kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath}) for kern in ${kernlist:-netbsd}; do
[ -f "${kernelbuildpath}/${kern}" ] && \
echo " ${kernelbuildpath}/${kern}"
done | tee -a "${results}"
fi

build.sh 파일의 일부입니다.

답변1

이것

var=value cmd ar1

cmdif 가 for 루프(또는 둘 다 bash아님 sh)인 경우 구문이 그다지 효율적이지 않은 것 같습니다.

sh둘 다 bash구문 오류가 발생합니다.

foo=bar for f in ${foo:-BAR}; do echo $f; done

이것은 본질적으로 당신이 하고 있는 일입니다.

(

  • sh: 1: for: 찾을 수 없음
  • bash: 예상치 못한 토큰 "do" 근처에 구문 오류가 있습니다.

)

couldn't find fi이 오류로 인해 귀하의 경우 오류가 발생하는 것 같습니다 .

별도의 줄에 변수를 설정하면 구문 오류가 수정됩니다.

kernlist=$(awk '$1 == "config" { print $2 }' ${kernelconfpath})
for kern in ${kernlist:-netbsd}; do #...

노트:

"$kernelbuildpath/$kern"내가 너 라면 "${kernelbuildpath}/${kern}"그냥 글을 쓸 텐데. 곱슬머리에는 기술적인 이유가 없습니다.

관련 정보