2010-11-15 5 views
10
./chkf: line 30: syntax error near unexpected token `elif' 
'/chkf: line 30: `elif [ -f "$object" ] ; then 


if [ -d "$object" ] ; then 
    message="$message a directory" 
elif [ -f "$object" ] ; then 
    message="$message a regular file." 
else 
    message="$message not a known file type" 
fi 

Aussi cela,Erreur de syntaxe près jeton inattendu `Elif »

./chkf: line 38: syntax error near unexpected token `else' 
'/chkf: line 38: `else 

if [ -w "$object" ] ; then 
    write="writeable" 
else 
    write="not writeable" 
fi 

Quel est le problème avec ça? Cela semble être correct. J'ai essayé tellement de variations et je n'arrive pas à comprendre ce qui ne va pas. Y a-t-il une sorte de personnage invisible? Si oui, y a-t-il une commande pour le déshabiller?

Edit: Quand j'ajoute #!/bin/bash en haut, je reçois l'erreur suivante:

interpreter "/bin/bash" not found 
file link resolves to "/usr/bin/bash" 
-bash: ./chkf: /bin/bash^M: bad interpreter: No such file or directory 
+0

Quelle coque utilisez-vous? Plutôt que de fragments, s'il vous plaît poster un [cas de test minimal] (http://sscce.org/). – outis

+0

@outis J'utilise bash – Strawberry

+0

Quelle version? 'echo $ BASH_VERSION' – outis

Répondre

30

C'est votre fin de ligne. Le transfert à partir de Windows a laissé les fins de ligne CR/LF sur.

Lorsque je crée un script puis ajouter manuellement les CR caractères, je reçois exactement la même erreur:

qq.sh: line 3: syntax error near unexpected token `elif' 
'q.sh: line 3: `elif [ 1 == 1 ] ; then 

Vous pouvez le fixer avec:

cat script.sh | sed '/\015/d' >newscript.sh 

qui va se débarrasser de tous les CR caractères dans votre fichier (15 octal est 13 décimal).

+0

+1, Nice approach. – codaddict

+3

Belle prise. 'dos2unix' est un utilitaire pratique installé sur de nombreux systèmes, supprime les CR inplace. –

+3

Si vous utilisez vim comme éditeur, vous pouvez définir ": set ff = unix" et réécrire dans le fichier. – f4m8

0

Maintenant que vous avez ajouté le message d'erreur supplémentaire, j'ai une pensée: le ^M est \ r , qui est la fin de la ligne Mac OS X ou une partie de la fin de la ligne Windows - Linux utilise uniquement \ n comme EOL. Si vous éditez dans vim, vous devriez être en mesure de voir le ^M si ce n'est pas juste à travers le fichier.

+0

OS X utilise '\ n' comme Linux et Unix (puisque c'est un membre de la famille). Les anciennes versions de Mac OS utilisaient autrefois '\ r'. –

+0

@Dennis: Je vois; n'a pas réalisé qu'il avait changé entre OS et OS X. –

3

Il semble que vous ayez le "problème dos", le contrôle-M intégré dans votre fichier. réparez-le avec sed:


sed -i 's/\r//' chkf 
-1

J'ai eu une erreur ci-dessous dans mon courrier lorsque j'ai configuré cron pour magento.

/bin/sh: -c: line 0: syntax error near unexpected token `newline' 
/bin/sh: -c: line 0: `php /home/pooja/public_html/magento/journal/cron1.php >' 

J'ai trouvé la solution pour cela est que je supprime l'espace de nouvelle ligne de mon fichier cron1.php. et son travail.

(source)

0

Deux façons de résoudre ce

1) En utilisant Sed: -

Syntaxe

sed -i 's/\r//' filename.txt 

2) Utilisation de la commande dos2unix

Syntaxe

dos2unix fileName.txt fileName.txt 
Questions connexes