killtec
Goto Top

Denkfehler - Syntaxfehler in Shell Script

Hallo,
ich habe folgendes Script:

if ping -c1 10.0.4.1 ; then
        #Allels ok
else
        /etc/init.d/ipsec restart
fi

Nun bekomme ich folgenden Fehler:
./tunnel.sh: line 3: syntax error: unexpected "else"  

Ich sehe hier nur keinen Syntaxfehler, sieht ihn jemand von euch?

Ich will hier nur ganz simpel prüfen, ob eine IP vom Tunnel da ist und falls nicht, den Tunnel neu starten.

Gruß

Content-ID: 367884

Url: https://administrator.de/forum/denkfehler-syntaxfehler-in-shell-script-367884.html

Ausgedruckt am: 07.04.2025 um 19:04 Uhr

colinardo
Lösung colinardo 13.03.2018 aktualisiert um 11:10:32 Uhr
Goto Top
Servus @killtec ,
dein Problem ist das du keinen Befehl zwischen dem then und dem else hast face-smile.
Negier den Ping einfach mit einem Ausrufezeichen und du brauchst keinen Else Zweig der hier ja offensichtlich nicht gebraucht wird.
#!/bin/sh
if ! ping -c1 10.0.4.1 >/dev/null ;then 
    /etc/init.d/ipsec restart
fi
Oder alternativ geht auch
#!/bin/sh
! ping -c1 10.0.4.1 >/dev/null &&  /etc/init.d/ipsec restart
Zweitens hast du keinen Shebang angegeben, das ist schlechter Stil denn dann könnte dein Skript einen anderen Interpreter nehmen als den den du eigentlich willst.

Siehe auch
https://unix.stackexchange.com/questions/133972/bash-syntax-error-when-e ...

Grüße Uwe
Lochkartenstanzer
Lösung Lochkartenstanzer 13.03.2018 aktualisiert um 10:08:28 Uhr
Goto Top
Moin,

würde ich auch sagen, daß da einfach unerwartet kein Befehl steht.

Entweder negieren, wie Uwe schon sagte oder einfach ein /bin/true statt "# Allels ok" hinschreiben.

lks
killtec
killtec 13.03.2018 um 11:02:25 Uhr
Goto Top
Hi,
danke euch beiden face-smile
Hab die Kurzvariante genommen. Wegen der BASH: Den Eintrag musste ich raus lassen, scheint keine Bash zu sein.

Danke.
colinardo
colinardo 13.03.2018 aktualisiert um 11:10:08 Uhr
Goto Top
Zitat von @killtec:
Wegen der BASH: Den Eintrag musste ich raus lassen, scheint keine Bash zu sein.
Dann lass sie dir mit echo $0 anzeigen.
How to determine the current shell I'm working on?
Nötig ist die Shebang nicht zwingend, es wird dann die Default Shell genommen, aber es gibt gute Gründe sie immer mit rein zu nehmen, gerade aus solchen Gründen wie du sie gerade erfährst, wenn sich plötzlich die Default Shell ändert etc..
Lochkartenstanzer
Lochkartenstanzer 13.03.2018 um 11:08:51 Uhr
Goto Top
Zitat von @killtec:

Wegen der BASH: Den Eintrag musste ich raus lassen, scheint keine Bash zu sein.

Solltest unter /bin (oder /usr/bin) trotzdem mal schauen, welche shells da sind, bzw. welche shell bei dem betreffenden User voreingestellt ist. Diese shell dann am besten im shebang eintragen. Das verhindert nämlich, das Dein skript irgendwann von heut auf morgen "spinnt", weil jemand die default shell geändert hat.

lks
killtec
killtec 15.03.2018 um 13:30:24 Uhr
Goto Top
Hi,
echo $0 bringt -ash raus.
Das Skript ist ein Notbehelf bis der Ursprüngliche Fehler gefunden ist, danach wird es gelöscht.
Danke!

Gruß