尝试运行 bash 脚本时出现“语法错误意外标记 fi”

尝试运行 bash 脚本时出现“语法错误意外标记 fi”

我尝试运行脚本,但出现此错误。这是什么意思?我该如何修复?

# 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

重要的是ifthen是两个单独的命令(单独的行或用 分隔;),但是thenelse和以下代码块的第一个命令必须是一个单独的命令(在同一行且不分隔)。

因此你的代码示例必须如下所示:

# 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

相关内容