Shell 脚本 - 找不到此“if”的“fi”

Shell 脚本 - 找不到此“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: 为: 未找到
  • bash:意外标记“do”附近出现语法错误

这个错误似乎会导致couldn't find fi你的情况出现错误;

在单独的行上设置变量可以修复语法错误:

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

笔记:

"$kernelbuildpath/$kern"如果"${kernelbuildpath}/${kern}"我是你,我只会写。卷发没有技术原因。

相关内容