it-frosch
Goto Top

Finde den Fehler im bash Skript nicht

Hallo Kollegen,

ich möchte ein bash Skript bauen, dass dem Nutzer mit zenity einen Dialog anzeigt aus dem er die abzuspielende Musik auswählen kann.
Das funktioniert alles auch, solange vlc schon läuft.
Dann wird vlc gekillt und die neue Playlist gestartet.

#!/bin/bash

BEFEHL=$(zenity --height=400 --list --radiolist  --title="Musik auswählen" --text="Gewünschten Eintrag anklicken und mit OK betätigen" --column="Auswahl" --column="Musik" TRUE Musik_ausschalten FALSE musik-01 FALSE musik-02)  

# Prüfen ob vlc läuft
a=$(pidof vlc)

# Playlist auswählen
PARAM=""  
if [ "$BEFEHL" = musik-01 ]; then killall vlc && cvlc --random /home/user/mp3   
elif [ "$BEFEHL" = musik-02 ]; then killall vlc && cvlc --random /home/user/mp3/Sicherung_USB   
elif [ "$BEFEHL" = Musik_ausschalten ]; then killall vlc   
fi

Jetzt versuche ich beim ersten Aufruf zu prüfen ob vlc schon läuft und wenn nicht, den killall Befehl zu überspringen.

#!/bin/bash

BEFEHL=$(zenity --height=400 --list --radiolist  --title="Musik auswählen" --text="Gewünschten Eintrag anklicken und mit OK betätigen" --column="Auswahl" --column="Musik" TRUE Musik_ausschalten FALSE musik-01 FALSE musik-02)  

# Prüfen ob vlc läuft
a=$(pidof vlc)

# Playlist auswählen
PARAM=""  
if [ "$BEFEHL" = musik-01 ]; then if [[ -z "$a" ]]; then cvlc --random /home/user/mp3 else  killall vlc && cvlc --random /home/user/mp3 fi  
elif [ "$BEFEHL" = musik-02 ]; then cvlc --random /home/user/mp3/Sicherung_USB   
elif [ "$BEFEHL" = Musik_ausschalten ]; then killall vlc   
fi

Allerdings bekomme ich hierbei eine Fehlermeldung:
 
./test.sh: Zeile 14: Syntaxfehler: Unerwartetes Dateiende.

Kann mir hier jemand einen Tipp geben, wo der Fehler liegen könnte?
Ich habe keine Idee mehr.

Danke schon mal.

Grüße vom it-frosch

Lösung:
Bei der einzeiligen Schreibweise müssen alle Teile des Befehls mit ; abgeschlossen werden
Also so:
if [ "$BEFEHL" = musik-01 ]; then if [[ -z "$a" ]]; then cvlc --random /home/user/mp3; else killall vlc && cvlc --random /home/user/mp3; fi

Dann funktioniert es auch mit if - then - else und der Abfrage. face-smile

Content-ID: 593157

Url: https://administrator.de/forum/finde-den-fehler-im-bash-skript-nicht-593157.html

Ausgedruckt am: 22.12.2024 um 01:12 Uhr

NikosLykos
Lösung NikosLykos 03.08.2020 um 00:41:30 Uhr
Goto Top
Hallo,

es fehlt in Zeile 10 wohl ein ; zwischen mp3 und fi

if [ "$BEFEHL" = musik-01 ]; then if [[ -z "$a" ]]; then cvlc --random /home/user/mp3 else  killall vlc && cvlc --random /home/steffen/mp3; fi  

Grüße
Klaus
it-frosch
it-frosch 03.08.2020 um 09:35:15 Uhr
Goto Top
Hallo Klaus,

kannst du mir auch sagen warum da ein ; hin muss oder einen Link schicken, wo ich das nachlesen kann.
Ich würde es gern verstehen. face-wink

Grüße vom it-frosch
Alchimedes
Alchimedes 03.08.2020 um 10:24:12 Uhr
Goto Top
Hallo ,

a=$(pidof vlc)]

Die Eckige Schlussklammer hat da nichts verloren.

Gruss
NikosLykos
Lösung NikosLykos 03.08.2020 um 10:55:18 Uhr
Goto Top
Hallo,

Hier ein Link:
ss64.com/bash/if.html

In der einzeiligen Form muss vor fi genauso ein ; stehen wie vor then

Grüße
Klaus
it-frosch
it-frosch 03.08.2020 um 13:39:11 Uhr
Goto Top
Hallo Archimedes,

Die Eckige Schlussklammer hat da nichts verloren.
war nur nein Übertragungsfehler, trotzdem danke. face-wink

grüße vom it-frosch
it-frosch
it-frosch 03.08.2020 um 14:04:04 Uhr
Goto Top
Hallo Klaus,

danke für den Link.
Vor else fehlte auch noch ein ; aber jetzt funktioniert das Skript.

grüße vom it-frosch