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

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

Printed on: April 19, 2024 at 18:04 o'clock

Member: NikosLykos
Solution NikosLykos Aug 02, 2020 at 22:41:30 (UTC)
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
Member: it-frosch
it-frosch Aug 03, 2020 at 07:35:15 (UTC)
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
Member: Alchimedes
Alchimedes Aug 03, 2020 at 08:24:12 (UTC)
Goto Top
Hallo ,

a=$(pidof vlc)]

Die Eckige Schlussklammer hat da nichts verloren.

Gruss
Member: NikosLykos
Solution NikosLykos Aug 03, 2020 at 08:55:18 (UTC)
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
Member: it-frosch
it-frosch Aug 03, 2020 at 11:39:11 (UTC)
Goto Top
Hallo Archimedes,

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

grüße vom it-frosch
Member: it-frosch
it-frosch Aug 03, 2020 at 12:04:04 (UTC)
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