Erste Schritte mit whiptail

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Erste Schritte mit whiptail

Beitrag von desputin » 05.01.2017 10:07:59

Hallo Ihr,
ich habe angefangen, mich mit whiptail zu beschäftigen.
Ich benötige ein kleines graphisches Auswahlmenü, mit dem ich Befehle ausführen kann.

Ich hab schon mal was gebastelt, aber das funktioniert noch nicht:

Code: Alles auswählen

#! /bin/bash

OPTION=$(whiptail --title "Test Menu Dialog" --menu "Choose your option" 15 60 4 \

"1" "Webcam steuern" \
"2" "Midnight Commander" \
"3" "Audio-Steuerung" \
"4" "test212" \
"5 "test23" 3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Your chosen option:" $OPTION
else
    echo "You chose Cancel."
fi
cowsay Works!
Was ich machen will ist, daß etwa bei Auswahl von 2 "mc" aufgerufen wird und bei 3 Audio-Steuerung ein weiteres whiptail-Script aufrufen.... Könnt Ihr mir sagen, wie das geht?

Das Hauptproblem, das ich habe, ist, daß ich nicht kapiere, an welcher Stelle in diesen Scripten die eigentlichen Befehle stehen...

Viele Grüße
desputin
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Erste Schritte mit whiptail

Beitrag von desputin » 08.01.2017 12:38:14

Hallo Ihr,
inzwischen hab ich es geschafft, einen Befehl abzusetzen über die Menüauswahl. Siehe die && exec Einfügung in der viertletzten Zeile.

Code: Alles auswählen

#!/bin/bash
OPTION=$(whiptail --title "Raspi-Haussteuerung" --menu "Auswählen" 13 45 4 \
"1" "Webcam Bilder" \
"2" "Webcam steuern" \
"3" "Audio-Samples" \
"4" "Cowsay!"  3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Option ausgewählt Nr.:" $OPTION && exec cowsay no
else
    echo "You chose Cancel."
fi
Das Menü gibt nun "Cowsay no" aus.

Wißt Ihr, wie ich das aber nun einrichten kann, daß hinter jedem ausgewählten Menüpunkt cowsay etwas anderes sagt? Bzw. wie andere Befehle hinterlegt werden können? Momentan ist es ja nun so, daß alle auswgewählten Menüpunkte das selbe Ergebnis haben, das soll aber ja nicht so sein...
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Erste Schritte mit whiptail

Beitrag von FragDenPinguin » 08.01.2017 14:35:59

Ich kenne mich mit whiptail nicht so aus, aber du kannst theoretisch Arrays benutzen. Z.B. so:

Code: Alles auswählen

#!/bin/bash
declare -a arr=("" "Ich bin eine Kuh." 
                "Ich bin ein Pferd." "Ich bin ein Frosch."
                "Ich bin kein Lügner!"
                )
OPTION=$(whiptail --title "Raspi-Haussteuerung" --menu "Auswählen" 13 45 4 \
"1" "Webcam Bilder" \
"2" "Webcam steuern" \
"3" "Audio-Samples" \
"4" "Cowsay!"  3>&1 1>&2 2>&3)
 
exitstatus=$?
if [ $exitstatus = 0 ]; then
    echo "Option ausgewählt Nr.:" $OPTION && exec cowsay ${arr[$OPTION]}
else
    echo "You chose Cancel."
fi
Dann wird halt der String mit der Nummer $OPTION abgefragt und ausgegeben. Der erste String ist leer, weil die Array-Nummerierung bei 0 anfängt. Vielleicht kennt aber jemand noch eine elegantere Lösung. ;)

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Erste Schritte mit whiptail

Beitrag von detix » 08.01.2017 14:43:22

Anstelle der „if then...” Entscheidung wäre mbMn hier „case” angebrachter zB:

Code: Alles auswählen

#!/bin/bash

Ausgabe=$(whiptail --title "Auswahl" --menu "Menu Skript" 10 40 4 \
"1" "Inhalt von /tmp" \
"2" "aktuelles Verzeichnis" \
"3" "Midnight Commander" 3>&1 1>&2 2>&3)

case $Ausgabe in
    1) echo "Befehl: ls /tmp"
       ls /tmp;;
    2) echo "Befehl: pwd"
       pwd;;
    3) echo "Befehl: mc"
       mc;;
    *) echo "Abbrechen/ESC gedrückt, Ende";;
esac
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Erste Schritte mit whiptail

Beitrag von FragDenPinguin » 08.01.2017 16:23:37

Gibt es eigentlich einen Grund dafür, dass du

Code: Alles auswählen

exec cowsay
anstatt

Code: Alles auswählen

 cowsay 
benutzt?

Bei ersterem wird die shell durch cowsay ersetzt und der Rest des Skripts nicht weiter ausgeführt.

Benutzeravatar
desputin
Beiträge: 1349
Registriert: 24.04.2015 17:16:34

Re: Erste Schritte mit whiptail

Beitrag von desputin » 09.01.2017 12:23:14

Hallo Ihr, vielen Dank für die Lösung, ich nehme jetzt das, was detix geschrieben hat.
Obwohl ich die Kuhsprüche von FragDenPinguin sehr gerne hab :)
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Antworten