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}"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258321
Url: https://administrator.de/contentid/258321
Ausgedruckt am: 25.11.2024 um 17:11 Uhr
12 Kommentare
Neuester Kommentar
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:
Oder?
Gruß,
Gersen
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
Folgender Code funktioniert hier ohne Probleme:
Vorausgesetzt, die notwendigen Variablen (SERVER, DESC1-4, INPUT) sind belegt.
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.
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
In der dialog-Anweisung wird mit "${auswahl[@]}" das Array wieder expandiert (nimm alle Werte des Arrays). Einzelheiten dazu im Link oben.
Frohes Fest!
Gersen
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.
Bei der Dialog-Anweisung dienen sie nur der Übersichtlichkeit - damit man sich vorstellen kann, wie der Dialog später aussieht. Es geht auch ohne:
ech\
o "Hal\
lo Welt"
dialog --menu "Choose one:" 10 30 3 1 red 2 green 3 blue