2016-10-27 6 views
0

Also habe ich mir selbst Bash-Skript für dieses Projekt bei der Arbeit zu lehren. Ich benutze RadBeacon Bluetooth-Beacons und einen Raspberry Pi, um Bus-Audio zu automatisieren, wenn Busse an einem bestimmten Ort vorbeifahren. Hier ist mein aktueller Code:Bash-Fehler, wenn ich mehr als eine else-Anweisung habe

Dies legt die Scan-Parameter und führt das zweite Stück, das die Scans liest und führt, was ich brauche.

#!/bin/bash 
while read line 
do 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA5 0 1"* ]]; then 
     mplayer /home/pi/Desktop/01intro.mp3 else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 0 1"* ]]; then 
     mplayer /home/pi/Desktop/02togravesite.mp3 else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA7 0 1"* ]]; then 
     mplayer /home/pi/Desktop/03gravesite.mp3 else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA8 0 1"* ]]; then 
     mplayer /home/pi/Desktop/04visitorcenter.mp3 else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA9 0 1"* ]]; then 
     mplayer /home/pi/Desktop/05conclusion.mp3 
    else 
    sudo beacon scan -A -b -d 4| /home/pi/Desktop/test3.sh 
fi 
done 

Wenn ich nur ein tun, wenn dann Anweisung der Code ohne Probleme läuft jedoch, wenn ich mehrere gehen sie sagt mir, es ist ein unerwartetes Token in der Nähe von „getan.“ Ich habe das recherchiert und vergebliche Versuche unternommen, ohne Erfolg. Weiß jemand das Problem, das ich habe?

Vielen Dank für Ihre Hilfe im Voraus!

+0

Try shellcheck.net – VM17

+0

Dank nun mit und seine ein paar Dinge zeigen –

Antwort

1

Verwenden Sie das elif Stichwort:

while read line 
do 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA5 0 1"* ]]; then 
     mplayer /home/pi/Desktop/01intro.mp3 
    elif [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 0 1"* ]]; then 
     mplayer /home/pi/Desktop/02togravesite.mp3 
    elif [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA7 0 1"* ]]; then 
     mplayer /home/pi/Desktop/03gravesite.mp3 
    elif [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA8 0 1"* ]]; then 
     mplayer /home/pi/Desktop/04visitorcenter.mp3 
    elif [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA9 0 1"* ]]; then 
     mplayer /home/pi/Desktop/05conclusion.mp3 
    else 
    sudo beacon scan -A -b -d 4| /home/pi/Desktop/test3.sh 
    fi 
done 

Oder noch besser, verwenden Sie eine case Aussage:

while read line 
do 
    case $line of 
    "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA5 0 1"*) f=01intro.mp3 ;; 
    "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 0 1"*) f=02togravesite.mp3 ;; 
    "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA7 0 1"*) f=03gravesite.mp3 ;; 
    "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA8 0 1"*) f=04visitorcenter.mp3 ;; 
    "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA9 0 1"*) f=05conclusion.mp3 ;; 
    esac 

    if [[ $f ]]; then 
     mplayer /home/pi/Desktop/"$f" 
    else 
     sudo beacon scan -A -b -d 4| /home/pi/Desktop/test3.sh ;; 
    fi 
done 

Andernfalls Sie eine große Anzahl von separaten if Aussagen haben, je eine pro else, dass jeder muss durch eine fi beendet werden. Außerdem muss jedem else ein ; vorangestellt werden, wenn es nicht in der nächsten Zeile ist.

while read line 
do 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA5 0 1"* ]]; then 
     mplayer /home/pi/Desktop/01intro.mp3; else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 0 1"* ]]; then 
     mplayer /home/pi/Desktop/02togravesite.mp3; else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA7 0 1"* ]]; then 
     mplayer /home/pi/Desktop/03gravesite.mp3; else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA8 0 1"* ]]; then 
     mplayer /home/pi/Desktop/04visitorcenter.mp3; else 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA9 0 1"* ]]; then 
     mplayer /home/pi/Desktop/05conclusion.mp3 
    else 
     sudo beacon scan -A -b -d 4| /home/pi/Desktop/test3.sh 
    fi; fi; fi; fi; fi 
done 

(Das gleiche mit unterschiedlichen Vertiefung der separaten if s zu betonen:

while read line 
do 
    if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA5 0 1"* ]]; then 
     mplayer /home/pi/Desktop/01intro.mp3 
    else 
     if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 0 1"* ]]; then 
     mplayer /home/pi/Desktop/02togravesite.mp3 
     else 
     if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA7 0 1"* ]]; then 
      mplayer /home/pi/Desktop/03gravesite.mp3 
     else 
      if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA8 0 1"* ]]; then 
      mplayer /home/pi/Desktop/04visitorcenter.mp3 
      else 
      if [[ $line = "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA9 0 1"* ]]; then 
       mplayer /home/pi/Desktop/05conclusion.mp3 
      else 
       sudo beacon scan -A -b -d 4| /home/pi/Desktop/test3.sh 
      fi 
      fi 
     fi 
     fi 
    fi 
done 
+0

Vielen Dank Ich nicht! weiß, dass es mehrere fi brauchte, aber wenn man es nicht ansieht, macht das viel mehr Sinn! elif scheint eine elegantere Lösung zu sein. Ich werde versuchen, das stattdessen umzusetzen. Nochmals vielen Dank, –

+0

Ich habe meine Antwort gelöscht. – VM17

Verwandte Themen