hardexit
Goto Top

Dialog menu anpassen, bestimmte anzahl felder anzeigen nach variable

Also ich möchte eine bestimmte menge an Auswahlen haben die sich nach der Variable "SERVER" richtet, unten habe ich mal das so gebaut wies funktionieren soll aber so nimmt er mir das natürlich nicht nun weiß ich aber nicht wie ich das umsetze.

dialog --clear --cancel-label "Exit" --ok-label "Select" \  
--backtitle "Minecraft Server Startscript" \  
--title "SELECT A SERVER" \  
--menu "Move using [UP] [DOWN],[Enter] to Select" 18 50 17 \  
if [ "$SERVER" -ge "1" ]; then  
	1 "$DESC1"\  
fi
if [ "$SERVER" -ge "2" ]; then  
	2 "$DESC2"\  
fi
if [ "$SERVER" -ge "3" ]; then  
	3 "$DESC3"\  
fi
if [ "$SERVER" -ge "4" ]; then  
	4 "$DESC4" 2  
fi
>"${INPUT}"  

Content-ID: 258321

Url: https://administrator.de/contentid/258321

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Gersen
Lösung Gersen 22.12.2014, aktualisiert am 23.12.2014 um 13:35:03 Uhr
Goto Top
Hallo,

zwei Probleme mit Deinem Code:
1. Die IF-Statements werden m.E. innerhalb der Dialog-Anweisung nicht unterstützt. Die müsstest Du vorher abarbeiten.

2. So wie Deine IF-Statements aktuell aufgebaut sind, wird im Auswahl-Dialog immer nur (höchstens) eine Alternative stehen (, da die Variable SERVER nicht mehrere Werte haben kann). Ich habe die Vermutung, Dein Konstrukt soll so aussehen:

auswahl=""
if [ "$SERVER" -ge "1" ]; then
 auswahl="1 $DESC1"
fi
if [ "$SERVER" -ge "2" ]; then
 auswahl="$auswahl 2 $DESC2"
fi
if [ "$SERVER" -ge "3" ]; then
 auswahl="$auswahl 3 $DESC3"
fi
if [ "$SERVER" -ge "4" ]; then
 auswahl="$auswahl 4 $DESC4"
fi
INPUT=`dialog --clear --cancel-label "Exit" --ok-label "Select" --backtitle "Minecraft Server Startscript" --title "SELECT A SERVER" --menu "Move using [UP] [DOWN],[Enter] to Select" 18 50 17 $auswahl 3>&1 1>&2 2>&3`
if [ -n "$INPUT" ]; then
 echo "Auswahl: $INPUT"
 else echo "ohne Auswahl verlassen"
fi


Oder?

Gruß,
Gersen
HardExit
HardExit 22.12.2014, aktualisiert am 23.12.2014 um 07:23:37 Uhr
Goto Top
läuft irgendwie nicht, hab das so in mein Script eingebaut aber der überspringt mir jetzt den teil
Gersen
Gersen 23.12.2014 um 08:28:05 Uhr
Goto Top
Ohne Kenntnis Deines Skripts wird es ganz schwer, Dir zu helfen.
HardExit
HardExit 23.12.2014 um 08:54:47 Uhr
Goto Top
Also das ist die Ganze Auswahlfunktion:
function SELECTS() {
	dialog --clear --cancel-label "Exit" --ok-label "Select" \  
	--backtitle "Minecraft Server Startscript" \  
	--title "SELECT A SERVER" \  
	--menu "Move using [UP] [DOWN],[Enter] to Select" 18 50 17 \  
	1 "$DESC1"\  
	2 "$DESC2"\  
	3 "$DESC3"\  
	4 "$DESC4" 2>"${INPUT}"  
	resposes=$?
	case $resposes in
	  0) 
			SERVER=$(<"${INPUT}")  
			$ACTION
		;;
		1) 
			printf "Exit pressed, go back to main menu." >$OUTPUT  
			msg_output 10 60 "SAY IN CHAT"  
			MENU
		;;
		255) 
			printf "[ESC] key pressed, go back to main menu." >$OUTPUT  
			msg_output 10 60 "SAY IN CHAT"  
			MENU
	esac
}

Ich hab da nun mal meinen Script teil mit deinem ersetzt und dann wurde mir das ganze einfach übersprungen
Gersen
Lösung Gersen 23.12.2014 aktualisiert um 13:16:05 Uhr
Goto Top
Folgender Code funktioniert hier ohne Probleme:
function SELECTS() {
 if [ "$SERVER" -ge "1" ]; then
  auswahl=1
  auswahl[1]="$DESC1"
 fi
 if [ "$SERVER" -ge "2" ]; then
  auswahl[2]=2
  auswahl[3]="$DESC2"
 fi
 if [ "$SERVER" -ge "3" ]; then
  auswahl[4]=3
  auswahl[5]="$DESC3"
 fi
 if [ "$SERVER" -ge "4" ]; then
  auswahl[6]=4
  auswahl[7]="$DESC4"
 fi
dialog --clear --cancel-label "Exit" --ok-label "Select" --backtitle "Minecraft Server Startscript" --title "SELECT A SERVER" --menu "Move using [UP] [DOWN],[Enter] to Select" 18 50 17 "${auswahl[@]}" 2>"${INPUT}"
resposes=$?
case $resposes in
 0)
    SERVER=$(<"${INPUT}")
    echo $SERVER
    ;;
 1)
    echo "Exit pressed, go back to main menu."
    ;;
 255)
    echo "[ESC] key pressed, go back to main menu."
esac
}

Vorausgesetzt, die notwendigen Variablen (SERVER, DESC1-4, INPUT) sind belegt.
HardExit
HardExit 23.12.2014 aktualisiert um 11:52:33 Uhr
Goto Top
die variable heißt auch SERVERS dammed,

jedenfalls hab ich das jetzt angepasst, aber ein anderes Problem ist aufgetreten
http://saved.im/mtczmzq1mzro/fehler.jpg

Die Variable $DESC1-4" besteht aus mehrere Wörtern
Gersen
Gersen 23.12.2014 aktualisiert um 13:09:30 Uhr
Goto Top
Stück für Stück...
Ich habe den Code oben angepasst (in den if-Anweisungen, in der dialog-Anweisung). Sollte eigentlich so funktionieren.
HardExit
HardExit 23.12.2014 um 13:15:52 Uhr
Goto Top
Nun funktioniert es super Danke!
Könntest du mir das if Konstrukt bitte noch erklären? Sowie die Variable ${auswahl[@]}
Gersen
Gersen 23.12.2014 um 13:40:54 Uhr
Goto Top
Ausgangspunkt ist Deine Variable SERVER(S) mit der Anzahl der Einträge. Das Skript startet bei der ersten IF-Schleife (Variable SERVER ist größer oder gleich 1; -ge = "greater or equal") und fügt dem Array "auswahl" die ersten beiden Einträge hinzu. Same procedure für die Vergleichswerte 2,3 und 4.

In der dialog-Anweisung wird mit "${auswahl[@]}" das Array wieder expandiert (nimm alle Werte des Arrays). Einzelheiten dazu im Link oben.

Frohes Fest!

Gersen
HardExit
HardExit 23.12.2014 um 13:52:08 Uhr
Goto Top
was ich noch nicht ganz verstehe ist woher weiß der dass da ne neue Zeile ist, wird dafür kein Backslash benötigt?
Gersen
Gersen 23.12.2014 aktualisiert um 14:19:38 Uhr
Goto Top
Die Backslashes dienen in der SHELL nur dazu, der Anweisung zu sagen, dass die Ausführung (am Ende der Zeile) noch nicht starten soll, sondern dass die nächste Zeile noch dazugehört.
ech\
o "Hal\
lo Welt"
Bei der Dialog-Anweisung dienen sie nur der Übersichtlichkeit - damit man sich vorstellen kann, wie der Dialog später aussieht. Es geht auch ohne:
dialog --menu "Choose one:" 10 30 3 1 red 2 green 3 blue
HardExit
HardExit 23.12.2014 um 14:22:37 Uhr
Goto Top
Ok vielen dank