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

również w tym,Błąd składni w pobliżu Nieoczekiwany token `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 

Co jest nie tak z tym? Wydaje się być poprawne. Próbowałem tak wielu wariacji i nie wiem, co jest nie tak. Czy jest jakaś niewidzialna postać? Jeśli tak, czy istnieje polecenie, aby je rozebrać?

Edit: Kiedy dodać #!/bin/bash na górze, pojawia się następujący błąd:

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

Jaką powłokę używasz? Zamiast fragmentów, opublikuj [minimalny przypadek testowy] (http://sscce.org/). – outis

+0

@outis Używam bash – Strawberry

+0

Jaką wersję? 'echo $ BASH_VERSION' – outis

Odpowiedz

30

To twoje końcówki linii. Przeniesienie go z systemu Windows spowodowało zakończenie linii CR/LF.

Kiedy utworzyć skrypt, a następnie ręcznie dodać CR znaki, mam dokładnie ten sam błąd:

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

Można go naprawić z:

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

który pozbędzie się wszystkich CR znaków w twoim pliku (15 oktal po 13 miejsc po przecinku).

+0

+1, Ładne podejście. – codaddict

+3

Przyjemny połów. 'dos2unix' to poręczne narzędzie instalowane na wielu systemach, usuwa CRs inplace. –

+3

Jeśli używasz vima jako edytora, możesz ustawić ": set ff = unix" i ponownie zapisać do pliku. – f4m8

0

Teraz, gdy dodaliśmy dodatkowy komunikat o błędzie, mam myśl: the ^M jest \ r , czyli linia Mac OS X kończąca się lub część zakończenia linii systemu Windows - Linux używa \ n tylko jako EOL. Jeśli edytujesz w vim, powinieneś zobaczyć ^M, jeśli nie jest to właściwe.

+0

OS X używa '\ n' tak jak Linux i Unix (ponieważ jest członkiem rodziny). Stare wersje Mac OS użyły kiedyś '\ r'. –

+0

@Dennis: Rozumiem; nie zdawałem sobie sprawy, że zmieniło się pomiędzy OS a OS X. –

3

Wygląda na to, że masz "problem dos", wbudowane formanty-M w twoim pliku. Napraw to za pomocą sed:


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

Dostałem poniżej błąd w mojej poczcie, kiedy ustawiłem cron na 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 >' 

Znalazłem rozwiązanie tego, że mogę usunąć przestrzeń nowej linii z mojego pliku cron1.php. i jego pracy.

(source)

0

dwa sposoby rozwiązania tego

1) Korzystanie z Sed: -

Składnia

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

2) za pomocą polecenia dos2unix

Składnia

dos2unix fileName.txt fileName.txt 
Powiązane problemy