“erro de sintaxe inesperado token fi” ao tentar executar o script bash

-1

Eu tentei executar um script, mas recebo esse erro. O que significa e como posso corrigi-lo?

# 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

e este é o meu erro:

./Allrun: line 31: syntax error near unexpected token 'fi'
./Allrun: line 31: 'fi'
    
por Mohsen 06.02.2016 / 20:38

2 respostas

1

Você deve adicionar e depois após os colchetes, porque então IF saberá que IF $ runNumber -eq 1 fará isso.

Portanto, o script correto deve ser semelhante:

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

Alguns exemplos para o futuro: link

    
por Gen 06.02.2016 / 20:42
0

Uma instrução if no bash se parece com isso (a indentação é opcional):

if [ CONDITION ]
  then COMMAND1
       MORE_COMMANDS
  else COMMAND2
       MORE_COMMANDS
fi

Ou em uma linha:

if [ CONDITION ] ; then COMMAND1 ; MORE_COMMANDS ; else COMMAND2 ; MORE_COMMANDS ; fi

É importante que if e then sejam dois comandos separados (linhas separadas ou separados por ; ), mas then ou else e o primeiro comando do bloco de código a seguir deve ser um comando único (na mesma linha e não separado).

Assim, seu exemplo de código deve ser assim:

# 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
    
por Byte Commander 06.02.2016 / 20:52