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-Key: 258321

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

Printed on: April 19, 2024 at 01:04 o'clock

Member: Gersen
Solution Gersen Dec 22, 2014, updated at Dec 23, 2014 at 12:35:03 (UTC)
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
Member: HardExit
HardExit Dec 22, 2014, updated at Dec 23, 2014 at 06:23:37 (UTC)
Goto Top
läuft irgendwie nicht, hab das so in mein Script eingebaut aber der überspringt mir jetzt den teil
Member: Gersen
Gersen Dec 23, 2014 at 07:28:05 (UTC)
Goto Top
Ohne Kenntnis Deines Skripts wird es ganz schwer, Dir zu helfen.
Member: HardExit
HardExit Dec 23, 2014 at 07:54:47 (UTC)
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
Member: Gersen
Solution Gersen Dec 23, 2014 updated at 12:16:05 (UTC)
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.
Member: HardExit
HardExit Dec 23, 2014 updated at 10:52:33 (UTC)
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
Member: Gersen
Gersen Dec 23, 2014 updated at 12:09:30 (UTC)
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.
Member: HardExit
HardExit Dec 23, 2014 at 12:15:52 (UTC)
Goto Top
Nun funktioniert es super Danke!
Könntest du mir das if Konstrukt bitte noch erklären? Sowie die Variable ${auswahl[@]}
Member: Gersen
Gersen Dec 23, 2014 at 12:40:54 (UTC)
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
Member: HardExit
HardExit Dec 23, 2014 at 12:52:08 (UTC)
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?
Member: Gersen
Gersen Dec 23, 2014 updated at 13:19:38 (UTC)
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
Member: HardExit
HardExit Dec 23, 2014 at 13:22:37 (UTC)
Goto Top
Ok vielen dank