SHELL : syntax error near unexpected token...

Bonjour,

Lorsque je souhaite interpréter le code ci dessous, j'obtiens le message suivant : syntax error near unexpected token 'else' à la ligne qui correspond à l'avant dernier "else".

Ca fait un moment que je cherche, je ne trouve pas...

Voici le code :

############################################################

renameFiles()
{
local pDirectory=${kNullString}
local pSequenceToReplace=${kNullString}
local pNewSequence=${kNullString}
local pMinDepth=${kNullInteger}
local pMaxDepth=${kNullInteger}

local lListWithExtensions=${kNullString}
local lListWithPaths=${kNullString}
local lLine=${kNullString}
local lOldFile=${kNullString}
local lOldFileName=${kNullString}
local lNewFile=${kNullString}
local lNewFileName=${kNullString}
local lReturnCode=${kNoError}

local lNameOfTempFile=${kNullString}
local lTempFile=${kNullString}

begin ${FUNCNAME} $*

#
# Five parameters are required
#
if [ $# -ge 5 ]
then

pDirectory="$1"
pSequenceToReplace="$2"
pNewSequence="$3"
pMinDepth=$4
pMaxDepth=$5

if [ -d "${pDirectory}" ]
then

lNameOfTempFile="tempFileOf${FUNCNAME}Function.txt"
lTempFile=./${lNameOfTempFile}

#
# List files with the good sequence and rename them
#
lListWithExtensions=${kYes}
lListWithPaths=${kYes}

listFiles "${pDirectory}" "${pSequenceToReplace}" ${lListWithExtensions} ${lListWithPaths} ${pMinDepth} ${pMaxDepth} ${lTempFile}

if [ $? -eq ${kNoError}]
then
while read lLine
do
lOldFile="${Line}"
getFileName "${Line}"
lOldFileName="${gResultOfGetFileName}"

getFilePath "${Line}"
lFilePath="${gResultOfGetFilePath}"

lNewFileName=$(echo "${lOldFileName}" | sed 's/"${pSequenceToReplace}"/"${pNewSequence}"/g')
lNewFile="${lFilePath}/${lNewFileName}"

mv "${lOldFile}" "${lNewFile}"
done < ${lTempFile}

else if [ $? -eq ${kNoFile}]
then
raiseInformation ${FUNCNAME} "No file has been found."
else
raiseError ${FUNCNAME} "list of files may be wrong."
lReturnCode=${kError}
fi

#
# Remove temporary file
#
rm -f ${lTempFile}
else
raiseError ${FUNCNAME} "directory specified does not exist (or a file is specified)"
lReturnCode=${kError}
fi
else
raiseError ${FUNCNAME} "needs 5 parameters"
lReturnCode=${kError}
fi
end ${FUNCNAME}
}

############################################################

Comme je me suis dis que Jipicy allait être probablement dans le coin...

Merci d'avance

A+
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Modérateur
    Salut,

    Si tu pouvais indenter ton code (sers-toi de la balise "code" pour ça) et le commenter surtout, se serait un peu plus lisible, parce que là, à vue de nez, y'a l'air d'avoir quelques incohérences dans la syntaxe "if...then...elif...then...elif...then...else...fi" et dans les espaces dans les tests "[ ... ]" (il faut un espace après le 1er crochet et avant le 2nd).

    Affiche aussi le reste du script, qu'on sache à quoi correspondent les "codes retour" !?
    1. salut,
      en effet essaie de remplacer else if par elif dans
      " else if [ $? -eq ${kNoFile}]
      then..."
      je crois que tu crées un if en trop et l'interpreteur te reclame un fi
      1. Jipicy désolé pour l'indentation je n'avais pas vu... copier coller

        alors effectivement c'était le problème du else if à tranformer en elif plus je pense un problème d'espace avant le crochet fermant de la cnodition.

        Merci à vous, yeux de lynx.

        A+