Script - Terminaleingabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Boity
Beiträge: 799
Registriert: 15.05.2009 13:59:19

Script - Terminaleingabe

Beitrag von Boity » 05.12.2010 18:33:25

Hi !


Ich würde gerne via Bashscript Eingaben via Terminal verabeiten,dass soll ungefähr so aussehen :

Code: Alles auswählen

./script.sh

Script gestartet - Bitte Aktion wählen :

[1] Installation
[2] Upgrade
[3] Deinstallation

ESC für "beenden"

Gibt es eventuell etwaige Codeschnipsel bzw. Stichwort wonach ich googlen könnte ?


Danke!

Benutzeravatar
Saxman
Beiträge: 4233
Registriert: 02.05.2005 21:53:52
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: localhost

Re: Script - Terminaleingabe

Beitrag von Saxman » 05.12.2010 18:38:27

Ich bin kein großer shell Scripter aber in einem meiner Scripte habe ich das mit read line gelöst.

Code: Alles auswählen

[...]
		$DAEMON99 "Soll das i386 Subsystem deaktiviert werden? [j|n]"
	{
		read line
		if [ $line == "j" ]; then
[...]
"Unix is simple. It just takes a genius to understand its simplicity." - Dennis Ritchie

Debian GNU/Linux Anwenderhandbuch | df.de Verhaltensregeln | Anleitungen zum Review und zum Verfassen von Wiki Artikeln.

Boity
Beiträge: 799
Registriert: 15.05.2009 13:59:19

Re: Script - Terminaleingabe

Beitrag von Boity » 05.12.2010 18:49:10

geht nicht :P !

JonnyBravo
Beiträge: 7
Registriert: 14.10.2010 22:26:25
Wohnort: Radebeul

Re: Script - Terminaleingabe

Beitrag von JonnyBravo » 05.12.2010 18:50:15

wie wäre es mit select und case

Code: Alles auswählen

select selector in "Installation" "Upgrade" "Deinstallation" "ESC"
do
case $selector in 
"Installation")eingabe;;
"Upgrade")eingabe ;;
"Deinstallation")eingabe ;;
"ESC")break;;
esac
done
zieht dann so aus

1) Installation
2) Upgrade
3) Deinstallation
4) ESC

weiter mit 1 2 3 4

Benutzeravatar
Saxman
Beiträge: 4233
Registriert: 02.05.2005 21:53:52
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: localhost

Re: Script - Terminaleingabe

Beitrag von Saxman » 05.12.2010 18:51:54

Doch das geht. Du kannst statt if übrigens auch mit case arbeiten.
Schau mal hier. Da sind auch ein Paar Beispiele.
"Unix is simple. It just takes a genius to understand its simplicity." - Dennis Ritchie

Debian GNU/Linux Anwenderhandbuch | df.de Verhaltensregeln | Anleitungen zum Review und zum Verfassen von Wiki Artikeln.

Methusalix

Re: Script - Terminaleingabe

Beitrag von Methusalix » 05.12.2010 18:53:06

Hallo,

<korinthenkacker>Wobei das eigentliche Kommando nur read heißt
und "line" in diesem Fall nur eine Variable ist, die die Eingabe speichert..</korinthenkacker>
Siehe man bash.

Gruß M.

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

Re: Script - Terminaleingabe

Beitrag von detix » 05.12.2010 19:46:42

Hier bietet sich doch Debiandialog an, sieht auch schöner aus:

Code: Alles auswählen

Antwort=$(dialog --stdout --menu 'Bitte Aktion wählen' 0 0 0 \
1 Installation \
2 Upgrade \
3 Deinstallation)
echo $Antwort
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Boity
Beiträge: 799
Registriert: 15.05.2009 13:59:19

Re: Script - Terminaleingabe

Beitrag von Boity » 05.12.2010 19:57:56

Hi und Danke für euere Antworten.

Ich habe wenig Ahnung von Programmierung...deswegen bitte nicht lachen :oops: .

Code: Alles auswählen

Antwort=$(dialog --stdout --menu 'Bitte Aktion wählen' 0 0 0 \
1 Installation \
2 Upgrade \
3 Deinstallation)
echo $Antwort
Die Eingabe dann mit einer "if abfrage" prüfen und verarbeiten ?

Methusalix

Re: Script - Terminaleingabe

Beitrag von Methusalix » 05.12.2010 20:08:41

Hallo,

es gibt wirklich keinen Grund zu lachen. Alle hier versammelten haben auch mal
klitzekleinahnungslos angefangen :?
"Dialog" ist nur ein grafischer Aufsatz, damit das alles ein bißer`l besser ausschaut.
Die Eingabe mußt Du natürlich auswerten, ob mit oder ohne "Dialog".
Dafür gibts sowohl hier im Forum als auch im Netz aber auch hunderte Beispiele.

Gruß M.

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

Re: Script - Terminaleingabe

Beitrag von detix » 05.12.2010 21:04:13

Frag den Rückgabewert mit case ab:

Code: Alles auswählen

case $Antwort in
  1)
    echo "Installation";;
  2)
    echo "Upgrade";;
  3)
    echo "Deinstallation";;
  *)
    echo "Abbruch";;
esac
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Boity
Beiträge: 799
Registriert: 15.05.2009 13:59:19

Re: Script - Terminaleingabe

Beitrag von Boity » 05.12.2010 21:51:55

Dann müsste das so aussehen oder ?

Code: Alles auswählen

#!/bin/bash



select selector in "Installation" "Upgrade" "Deinstallation" "ESC"
do
case $selector in
"Installation")eingabe;;
"Upgrade")eingabe ;;
"Deinstallation")eingabe ;;
"ESC")break;;
esac

case $selector in
  1)
    echo "Installation";;
  2)
    echo "Upgrade";;
  3)
    echo "Deinstallation";;
  *)
    echo "Abbruch";;
esac


done

Methusalix

Re: Script - Terminaleingabe

Beitrag von Methusalix » 06.12.2010 00:55:36

Hallo,

wenn Du das in eine ausführbare Datei schreibst und diese dann aufrufst, was passiert denn dann?
Das hat ja vermutlich mit dem Ergebnis, das Du erzielen möchtest, nicht sonderlich viel zu tun!?!?
Nach meinem Gefühl solltest Du Dich erstmal mit einigen Grundlagen - Saxman hat Dir ja einen
link gepostet (es gibt aber auch noch zahlreiche Alternativen) - beschäftigen.

Gruß M.

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script - Terminaleingabe

Beitrag von Meillo » 06.12.2010 14:36:07

Nur mal so grundsaetzlich: Diese Art von Kommandozeilenprogrammen ist nicht der uebliche automatisierbare und skalierende Unix-Stil. Du solltest darauf besser verzichten und stattdessen Kommandozeilenargumente (-i, -u, -d) verwenden.

Siehe dazu: http://de.wikipedia.org/wiki/Unix-Philosophie
(Insbesondere Gancarz #8: Vermeide Benutzeroberflächen, die den Benutzer fesseln.)
Use ed once in a while!

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

Re: Script - Terminaleingabe

Beitrag von detix » 06.12.2010 19:42:01

Meillo hat geschrieben:Siehe dazu: http://de.wikipedia.org/wiki/Unix-Philosophie
(Insbesondere Gancarz #8: Vermeide Benutzeroberflächen, die den Benutzer fesseln.)
Das war aber jetzt nur ein Scherz, ...oder doch nicht?
Diese Aussage ist von 1994!
Was war denn da nochmal aktuell, ahja OS/2 Warp, nicht mal win95 und rechnermäßig:
http://www.computerwoche.de/heftarchiv/1994/19/1121331/
und überhaupt:
http://www.computerhope.com/history/1994.htm
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script - Terminaleingabe

Beitrag von Meillo » 06.12.2010 20:14:18

detix hat geschrieben:
Meillo hat geschrieben:Siehe dazu: http://de.wikipedia.org/wiki/Unix-Philosophie
(Insbesondere Gancarz #8: Vermeide Benutzeroberflächen, die den Benutzer fesseln.)
Das war aber jetzt nur ein Scherz, ...oder doch nicht?
Diese Aussage ist von 1994!
Nein, das war sicher kein Scherz, sondern ein Ratschlag der in diesem Fall, und auch sonst oft, sehr hilfreich ist. Wenn er die Operationsmodi als Kommandozeilenswitches einbaut dann kann sein Programm problemlos automatisiert werden. Wenn er es interaktiv macht, dann nur ueber Umwege (yes(1), expect(1)) mit Aufwand.

Die Unix Philosophie ist zum groessten Teil zeitlos.

Wir koennen gerne darueber argumentieren, ich bin bereit. :twisted: ;)
Use ed once in a while!

Boity
Beiträge: 799
Registriert: 15.05.2009 13:59:19

Re: Script - Terminaleingabe

Beitrag von Boity » 07.12.2010 09:27:09

Ich wollte jetzt nicht unbedingt nen Drama draus machen :D - Philosophie hin oder her -> mir Wurscht !

Adryan
Beiträge: 17
Registriert: 17.11.2010 19:00:30

Re: Script - Terminaleingabe

Beitrag von Adryan » 07.12.2010 09:54:27

eine Frage, wieso setzt man hier nicht mit:

Code: Alles auswählen

read key
an?

Dadurch würde sich die Frage/Antwort stellung recht simple umsetzen lassen?

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Script - Terminaleingabe

Beitrag von Meillo » 07.12.2010 13:43:29

Adryan hat geschrieben:eine Frage, wieso setzt man hier nicht mit:

Code: Alles auswählen

read key
an?

Dadurch würde sich die Frage/Antwort stellung recht simple umsetzen lassen?
Eben genau das hat Saxman in der ersten Antwort vorgeschlagen. Leider war der Kommentar nur:
Boity hat geschrieben:geht nicht :P !
Dazu muss man ja nicht mehr viel sagen.

Dann wurden alle moeglichen Dinge in den Thead geworfen, aber geholfen haben die doch nichts. Das eigentliche Problem, dass er read nicht richtig verwendet hat und es deshalb nicht ging, wurde ignoriert. Ja, `read var' war schon genau richtig. Wenn's nicht ging (Weshalb den nicht?) dann lag der Fehler sicher woanders aber nicht daran, dass read verwendet wurde.

Siehe dazu nochmal:

Code: Alles auswählen

echo "Enter count of number of items"
read num
if [ $num -le 0 ] ; then
....

Boity hat geschrieben:Ich wollte jetzt nicht unbedingt nen Drama draus machen :D - Philosophie hin oder her -> mir Wurscht !
Ich hatte angenommen, dass mit der Erwaehnung von read und dem Link zum Beispiel von Saxman das Thema gegessen sei, denn damit war alles gegeben was man zur Loesung des Problems braucht.

Mein Kommentar war gedacht um einen Unix-artigeren Ansatz als Alternative aufzuzeigen. Das hat nichts mit einem Drama zu tun. Hier soll es nicht nur um ``Ich habe dieses Problem -- hier hast du die passende Loesung'' gehen; es geht auch darum Wissen zu vermitteln. Jeder hier kann noch was lernen und das sollten wir tun.
Use ed once in a while!

Antworten