help, brauche hilfe bei menü coden

bsd-yusa

semi-pro geek
mein haupt menu ist eine datei und schaut so aus:

Code:
while [ answer != "0" ]
do
clear
echo "                    hauptmenu"
echo " 1. mach dies"
echo " 2. mach das"
echo " 0. raus hier"

read -p " -> " answer
    case $answer in
       0) break ;;
       1) sh unterproggy1 ;;
       2) sh unterproggy2 ;;
   esac
   echo ""
   echo "press ANY key"
   read key
done
exit 0

das erste untermenü ist eine extra datei, in diesem beispiel unterproggy1
das zweite auch (unterproggy2)
sie funktionieren so wie das hauptmenu, nur dass eben andere unterproggys gestartet werden.

jetzt habe ich hier 8 menüdateien (tendenz steigend) und es wird langsam zeit, statt vielen kleinen files ein grosses zu verwenden,
sonst verliere ich noch den überblick ;)
kann mir jetzt jemand dabei helfen, dies umzusetzen? ist das möglich ohne grossartig den vorhandenen code zu verwenden?
 
Warum benutzt Du nicht einfach Funktionen.
Anstatt das Unterprogramm aufzurufen, rufst Du die Funktion auf.
Diese kannst Du dann in die gleiche Datei schreiben.
 
äähm, ich hab heute durchgemacht... wie geht das? xD

neue frage: wie kann ich die funktionstasten F1-F12 mit befehlen belegen?
 
Das HowTo kann man wirklich empfehlen...
War das jetzt irgendwie sarkastisch? Ich weiß die Komplexität der Beispiele steigt am Schluss ziemlich schnell an, aber viele Menschen beschäftigen sich ja auch gar nicht so weit mit Shell-Skripten. Und natürlich bin ich für etwas Feedback immer dankbar. Wenn dir also etwas einfällt, wie der Artikel besser werden kann...
 
War das jetzt irgendwie sarkastisch? Ich weiß die Komplexität der Beispiele steigt am Schluss ziemlich schnell an, aber viele Menschen beschäftigen sich ja auch gar nicht so weit mit Shell-Skripten. Und natürlich bin ich für etwas Feedback immer dankbar. Wenn dir also etwas einfällt, wie der Artikel besser werden kann...


Nee, sorry...da habe ich mich wohl unglücklich ausgedrückt.
Ich finde das HowTo wirklich sehr gut!
Kurz, knackig und verständlich.
 
ja also ich hab' das scripting howto bereits mehrmals überflogen und weiss noch immer nicht wie ich von diesen funktionen gebrauch machen kann.

und dann wollte ich wissen, wie ich ganz einfach eine datei zeilenweise auslesen kann, um sie anschliessend zu formatieren. lt. howto brauche ich hier head?

wenn ich es my way mach' wird die line nicht als line eingelesen:

Code:
$ for i in `top | grep RUN`
> do
> echo $i
> done
8688
user1
1
96
0
3488K
1388K
RUN
0:00
0.00%
top
$

hab' schon diverse cat optionen ausprobiert...

es bringt auch nichts wenn ich den top output vorher in eine datei umleite.
 
Code:
$ for i in `top | grep RUN`
> do
> echo $i
> done
8688
user1
1
96
0
3488K
1388K
RUN
0:00
0.00%
top
$

Das geschieht, weil die Schleife das Lerzeichen als Trennsymbol benutzt:
Code:
for i in 1 2 3 4; do
echo $i
done
gibt aus:
Code:
1
2
3
4

wenn du vorher das Trennzeichen auf "neue Zeile" setzt, dann hast du, was du suchst:
Code:
# sieht komisch aus, aber zwischen den Anführungszeichen ist ein NEWLINE Zeichen
IFS="
"
for i in `top | grep RUN`
do
echo $i
done

lies mal hier nach
http://wiki.bsdforen.de/howto/shell-scripting#schleifen

@kamikaze
ich finde Deinen Wiki-Eintrag zum Shellscripting auch sehr gut - ist stets meine erste Anlaufstelle bei Fragen zum Thema
 
ja also ich hab' das scripting howto bereits mehrmals überflogen und weiss noch immer nicht wie ich von diesen funktionen gebrauch machen kann.

Vielleicht hilft Dir dieses kurze Beispiel weiter.
Du kannst Dein Script in Teilaufgaben gliedern und jede Teilaufgabe in eine eigene Funktion packen. Bei Bedarf lässt Du dann die Funktion ausführen (sprich Du rufst die Funktion auf).

Code:
#!/bin/sh
 
output='global'       # globale variable erzeugen
                      # gilt im ganzen shellscript
 
funktion_1() {
	local output	# locale variable erzeugen
		        # gilt nur innrehalb der funktion
			# wird beim beenden der funktion vernichtet
	output='lokal funktion_1'
	printf "$output\n"
}
 
funktion_2() {
	local output	# locale variable erzeugen
	output='lokal funktion_2'
	printf "$output\n"
}

funktion_3() {
			# hier wird die globale variable benutzt bzw ueberschrieben
	output='globale variable output ueberschrieben'
	printf "$output\n"
}

funktion_1		# aufruf funktion_1
printf "$output\n"
funktion_2		# aufruf funktion_2
printf "$output\n"	
funktion_3		# aufruf funktion_3
printf "$output\n"

# ausgabe script
#     lokal funktion_1
#     global
#     lokal funktion_2
#     global
#     globale variable output ueberschrieben
#     globale variable output ueberschrieben

Du kannst wenn Du eine Funktion aufrufst, der Funktion auch Werte (sprich Parameter) übergeben.
Du kannst Dir auch Werte aus der Funktion zurück geben lassen.
Und möglichst wenig globale Variablen benutzen, da diese Deinen Code unübersichtlicher machen.
 
Zurück
Oben