我尝试运行脚本,但出现此错误。这是什么意思?我该如何修复?
# Make the mesh using blockMesh (serial) and decompose it.
if [ $runNumber -eq 1 ]
cp constant/polyMesh/blockMeshDict ./
rm -rf constant/polyMesh/*
mv ./blockMeshDict constant/polyMesh
blockMesh > log.blockMesh 2>&1
decomposePar -cellDist -force > log.decomposePar 2>&1
fi
这是我的错误:
./Allrun: line 31: syntax error near unexpected token `fi'
./Allrun: line 31: `fi'
答案1
您必须添加然后在方括号后面,因为这样 IF 就会知道 IF $runNumber -eq 1 他会这样做。
所以正确的脚本应该是这样的:
if [ $runNumber -eq 1 ]; then
cp constant/polyMesh/blockMeshDict ./
rm -rf constant/polyMesh/*
mv ./blockMeshDict constant/polyMesh
blockMesh > log.blockMesh 2>&1
decomposePar -cellDist -force > log.decomposePar 2>&1
fi
未来的一些例子:http://www.thegeekstuff.com/2010/06/bash-if-statement-examples/
答案2
bash 中的语句if
如下所示(缩进是可选的):
if [ CONDITION ]
then COMMAND1
MORE_COMMANDS
else COMMAND2
MORE_COMMANDS
fi
或者用一行代码:
if [ CONDITION ] ; then COMMAND1 ; MORE_COMMANDS ; else COMMAND2 ; MORE_COMMANDS ; fi
重要的是if
和then
是两个单独的命令(单独的行或用 分隔;
),但是then
或else
和以下代码块的第一个命令必须是一个单独的命令(在同一行且不分隔)。
因此你的代码示例必须如下所示:
# Make the mesh using blockMesh (serial) and decompose it.
if [ $runNumber -eq 1 ]
then cp constant/polyMesh/blockMeshDict ./
rm -rf constant/polyMesh/*
mv ./blockMeshDict constant/polyMesh
blockMesh > log.blockMesh 2>&1
decomposePar -cellDist -force > log.decomposePar 2>&1
fi