Thread Startscript: Kleines Problem mit meinen Ideen ein Tea (34 answers)
Opened by Gast at 2005-05-15 07:04

Dubu
 2005-05-22 18:28
#54965 #54965
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=BoSSSpy,22.05.2005, 11:45]
Schreibt doch mal ein Auswahlmenu wie:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
####################################
Was wollen sie tun:
--(1)TS-Serverhosting
--(2)CS-Serverhosting
--(3)NS-Serverhosting
--(4)Root-Serverhosting
--(5)Config. dieses Scriptes
Eingabe:1
...

TS-Hosting, sie haben die Wahl:
--(1)Teamspeak2Server Starten
--(2)Teamspeak2Server Stoppen
--(3)Teamspeak2Server Status
--(4)Teamspeak2Server Passwordabfrage
--(5)Teamspeak2Server Config
--(6)Zurück zum Hauptmenu
Eingabe:6
####################################

[/quote]
Gerne, aber dazu nutze ich weder endlos verschachtelte ifs, noch (*oerks*) gotos, sondern eine allgemeine Menuefunktion und eine passende Datenstruktur:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/perl
use strict;
use warnings;

# Menuestruktur
my %Menus = (
   main => {
       title => 'Was wollen sie tun:',
       content => [
           [ 'TS-Serverhosting',        [ \&menu, 'tshosting' ] ],
           [ 'CS-Serverhosting',        [ \&menu, 'cshosting' ] ],
           [ 'NS-Serverhosting',        [ \&menu, 'nshosting' ] ],
           [ 'Root-Serverhosting',      [ \&menu, 'roothosting' ] ],
           [ 'Config. dieses Scriptes', [ \&scriptconfig ] ],
           [ 'Ende', [] ],
       ],
   },
   tshosting => {
       title => 'TS-Hosting, Sie haben die Wahl:',
       content => [
           [ 'Teamspeak2Server Starten', [ \&tsserver, 'start' ] ],
           [ 'Teamspeak2Server Stoppen', [ \&tsserver, 'stop' ] ],
           [ 'Teamspeak2Server Status',  [ \&tsserver, 'status' ] ],
           [ 'Teamspeak2Server Passwortabfrage', [ \&tsserver, 'password' ] ],
           [ 'Teamspeak2Server Konfiguration',   [ \&tsserver, 'config' ] ],
           [ 'Zurück zum Hauptmenü',     [] ],
       ],
   },
   cshosting => {
       title => 'CS-Server, Sie haben die Wahl:',
       content => [
           [ 'CS-Server starten', [ \&anyserver, 'CS', 'start' ] ],
           [ 'CS-Server stoppen', [ \&anyserver, 'CS', 'stop'  ] ],
           [ 'Zurück zum Hauptmenü',     [] ],
       ],
   },
   nshosting => {
       title => 'NS-Server, Sie haben die Wahl:',
       content => [
           [ 'NS-Server ...', [ \&anyserver, 'NS', '...' ] ],
           [ 'Zurück zum Hauptmenü',     [] ],
       ],
   },
   roothosting => {
       title => 'Rootserver-Hosting:',
       content => [
           [ 'Rootserver ...', [ \&anyserver, 'Root', '...' ] ],
           [ 'Zurück zum Hauptmenü',     [] ],
       ],
   },
);

# Starte Hauptmenue
menu('main');

exit;

########################################
# Subroutinen
########################################

sub menu {
   my ($menuentry) = @_;

   my $title   = $Menus{$menuentry}{title};
   my @content = @{$Menus{$menuentry}{content}};
   while (1) {
       my $eingabe;
       while (1) {
           # Titel ausgeben
           print "$title\n";
           # Menuepunkte ausgeben
           for (1 .. @content) {
               print "--($_) ", $content[$_-1][0], "\n";
           }
           print "Eingabe: ";
           $eingabe = <STDIN>;
           last if $eingabe =~ /^\d+$/ && $eingabe > 0 && $eingabe <= @content;
           print "\n*** Ungültige Eingabe, bitte neu. ***\n\n";
       }

       # Ausgewaehlte Menuefunktion holen
       my @menufunc = @{$content[$eingabe-1][1]};
       if (@menufunc) {
           # Funktion aufrufen, wenn angegeben
           my $function = shift @menufunc;
           print "\n";
           $function->(@menufunc);
           print "\n";
       } else {
           # ansonsten zurueck
           return;
       }
   }
}

sub tsserver {
   print "=== Die Funktion $_[0] im TSServer wurde aufgerufen ===\n";
}

sub anyserver {
   print "=== Die Funktion $_[1] für den $_[0]-Server wurde aufgerufen ===\n";
}

sub scriptconfig {
   print "=== Hier käme die Skript-Konfiguration ===\n";
}

########################################


Quote
Hier macht es Sinn ein "goto" zu setzen ...

Noe.

Quote
das ganze millionfach ineinander zu ver-if-schachteln würde zu stressig sein ... besonders dann wenn ich das Scipt denn erweitern will, sprich ähm nen StarCraft-Server oder sonst was zu installieren.

Das waere fast noch bloedsinniger.

Quote
Ich red ja nicht davon das goto ne schleife abschaffen soll ... aber sie macht 100% Sinn auch ohne nen C64!

Sehr, sehr selten. Und hier ist kein Fall dafuer. Jedenfalls nicht, wenn man nur den Hauch von strukturierter Programmierung anwenden moechte!

View full thread Startscript: Kleines Problem mit meinen Ideen ein Tea