GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Syntaxfehler in der Nähe des unerwarteten Tokens „then“

Die Lösung ist ziemlich einfach. Geben Sie einfach ein Leerzeichen zwischen if und den öffnenden eckigen Klammern ein, wie unten angegeben.

if [ -f "$File" ]; then <code> fi


Zwischen if muss ein Leerzeichen stehen und [ , etwa so:

#!/bin/bash
#test file exists

FILE="1"
if [ -e "$FILE" ]; then
  if [ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
...

Diese (und ihre Kombinationen) wären alle falsch auch:

if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then

Diese hingegen sind alle in Ordnung:

if [ -e "$FILE" ];then  # no spaces around ;
if     [    -e   "$FILE"    ]   ;   then  # 1 or more spaces are ok

Übrigens sind diese äquivalent:

if [ -e "$FILE" ]; then
if test -e "$FILE"; then

Diese sind auch gleichwertig:

if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists

Und der mittlere Teil Ihres Skripts wäre mit einem elif besser gewesen so:

if [ -f "$FILE" ]; then
    echo $FILE is a regular file
elif [ -d "$FILE" ]; then
    echo $FILE is a directory
fi

(Ich habe auch die Anführungszeichen in echo weggelassen , da sie in diesem Beispiel unnötig sind)


Linux
  1. Fehlerbehandlung in Bash-Skripten

  2. Überprüfung der PHP-Syntax.

  3. Fehler:DNS-Propagation check Token Mismatch [Gelöst]

  4. „Syntaxfehler in der Nähe eines unerwarteten Tokens“ nach dem Bearbeiten von .bashrc?

  5. Behebung des „Authentifizierungstoken-Manipulationsfehlers“ in Ubuntu Linux

Ein Tls-Paket mit unerwarteter Länge wurde empfangen?

Fehler:Unerwartete Inkonsistenz; Fsck manuell ausführen?

Fehler „Unerwartetes Dateiende“ und „Fehler beim Importieren der Funktionsdefinition“ beim Ausführen von Shellscript mit qsub

Syntaxfehler:Dateiende unerwartet (dann erwartet)

Apparmor - wie kann man die Regel "alles zulassen" und dann verschärfen?

Warum wird dieser ldapadd-Befehl mit einem ungültigen Syntaxfehler beendet?