シェルスクリプト - この '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}"ただ文章を書くでしょう。カールには技術的な理由はありません。

おすすめ記事