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-Key: 367884

Url: https://administrator.de/contentid/367884

Printed on: April 26, 2024 at 15:04 o'clock

Member: colinardo
Solution colinardo Mar 13, 2018 updated at 10:10:32 (UTC)
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
Member: Lochkartenstanzer
Solution Lochkartenstanzer Mar 13, 2018 updated at 09:08:28 (UTC)
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
Member: killtec
killtec Mar 13, 2018 at 10:02:25 (UTC)
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.
Member: colinardo
colinardo Mar 13, 2018 updated at 10:10:08 (UTC)
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..
Member: Lochkartenstanzer
Lochkartenstanzer Mar 13, 2018 at 10:08:51 (UTC)
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
Member: killtec
killtec Mar 15, 2018 at 12:30:24 (UTC)
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ß