2010-11-15 24 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 

Además de esto,Error de sintaxis cerca de símbolo inesperado '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 

Lo que está mal con esto? Parece ser correcto Intenté tantas variaciones y no puedo entender qué está mal. ¿Hay algún tipo de personaje invisible? Si es así, ¿hay un comando para despojarlo?

Editar: Cuando agrego #!/bin/bash en la parte superior, me sale el siguiente error:

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

¿Qué shell estás usando? En lugar de fragmentos, publique un [caso de prueba mínima] (http://sscce.org/). – outis

+0

@outis Estoy usando bash – Strawberry

+0

¿Qué versión? 'echo $ BASH_VERSION' – outis

Respuesta

30

Son tus terminaciones de línea. La transferencia desde Windows dejó las terminaciones de línea CR/LF.

Al crear una secuencia de comandos a continuación, añadir manualmente los CR caracteres, consigo exactamente el mismo error:

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

se puede arreglar con:

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

que deshacerse de toda la CR caracteres en su archivo (15 octal es 13 decimal).

+0

+1, enfoque agradable. – codaddict

+3

Buena captura. 'dos2unix' es una práctica utilidad instalada en muchos sistemas, elimina los CR en su lugar. –

+3

Si está utilizando vim como editor, puede establecer ": set ff = unix" y escribir en el archivo de nuevo. – f4m8

0

Ahora que ha añadido el mensaje de error adicional, tengo un pensamiento: la ^M es r \ , que es la terminación de línea de Mac OS X o parte de la terminación de línea de Windows, Linux usa \ n solo como EOL. Si edita en vim, debería poder ver el ^M si no está bien en el archivo.

+0

OS X usa '\ n' al igual que Linux y Unix (ya que es un miembro de la familia). Las versiones anteriores de Mac OS se usaban una vez '\ r'. –

+0

@Dennis: Ya veo; no se dio cuenta de que había cambiado entre el sistema operativo y el sistema operativo X. –

3

parece que tiene el "dos problema", las M de control incrustadas en su archivo. arréglalo con sed:


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

Recibí el siguiente error en mi correo cuando configuré cron para 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 >' 

Encontré la solución para eso es que elimino el espacio de la nueva línea de mi archivo cron1.php. y su trabajo.

(source)

0

Dos formas de resolver este

1) usando sed: -

Sintaxis

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

2) Mediante el comando dos2unix

Sintaxis

dos2unix fileName.txt fileName.txt 
Cuestiones relacionadas