Problem mit bash script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

Problem mit bash script

Beitrag von dmant » 16.01.2018 18:54:02

Hallo,

Ich habe ein Problem mit folgendem Script

https://nopaste.linux-dev.org/?1172055

Das Script läuft bis Zeile 92 richtig durch.

VPNCONNECTED ist immer 0. Und das obwohl der VPN läuft. Auf der Kommandozeile kann ich den VPN ganz normal anpingen.

Jemand einen Rat?

owl102

Re: Problem mit bash script

Beitrag von owl102 » 16.01.2018 19:33:28

if [ VPNCONNECTED == 1 ];
Diese Bedingung ist immer falsch, denn die Zeichenkette "VPNCONNECTED" ist nicht gleich der Zeichenkette "1". Du meinst entweder

Code: Alles auswählen

if [ $VPNCONNECTED = 1 ]
oder

Code: Alles auswählen

if (( VPNCONNECTED == 1 ))
Davon ab würde ich

Code: Alles auswählen

xxx
if [ $? -eq 0 ]
durch

Code: Alles auswählen

if xxx
ersetzen. (Siehe auch: http://mywiki.wooledge.org/BashPitfalls ... .7C.7C_die ) Funktional gleich, würde aber zeigen, daß du "if" in Shell-Scripten verstanden hast. :wink: (Siehe auch: http://mywiki.wooledge.org/BashPitfalls ... _myfile.5D ) Aber das hatte dir Meillo auch schon geschrieben: viewtopic.php?p=1160131#p1160131

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Problem mit bash script

Beitrag von breakthewall » 16.01.2018 22:06:20

Ich kann mich meinem Vorposter nur anschließen. Zusätzlich fiel mir noch auf, dass alle ";" in deinem Shellscript keinem Zweck dienen, und an sich gelöscht werden können. Ebenso nutzt viele groß geschriebene Variablen, was dir Probleme bereiten kann, wenn unbeabsichtigt globale Umgebungsvariablen überschreibst. Daher immer aufpassen und Variablen idealerweise klein schreiben. Würde dir auch empfehlen, Variablenwerte (VAR="WERT") grundsätzlich in Doublequotes zu setzen, was die Sicherheit erhöht bezüglich beliebiger Inhalte. Denn für gewöhnlich ist es nicht wirklich erwünscht, dass eine Kommandozeile falsch interpretiert wird, wenn sich ggf. Werte und Parameter überschneiden. Dann würde das jeweilige Programm letztlich Fehler oder gar ernste Probleme produzieren. Zuzüglich kann es je nach Fall sinnvoll sein, auch ausgeschriebene Variablen ($VAR) der Sicherheit wegen in Doublequotes zu setzen, um den Inhalt einer Variable als Ganzes zu übergeben. Wenn man hier mehrere Werte oder Parameter übergeben will, dann wäre ein Array wieder besser.

Code: Alles auswählen

if PROGRAMM PARAMETER
Wie schon gesagt wurde ist das deutlich empfehlenswerter. Zum einen weil es deutlich Code einspart, und zum anderen können Exitcodes der jeweiligen Bedingungen direkt verarbeitet werden.

Antworten