2017-07-01 8 views
1

Ich versuche, ein dynamisches Menü zu generieren und wählen Sie dann die Option, die ich in einer Variablen speichern möchte. Bisher habe ich das, aber ich stecke fest. Es ist immer immer standardmäßigDynamisch generierte Bash-Menü

"ERROR Auswahl nicht in der Liste, führen Sie das Skript erneut."

IFACES=$(nmcli -t -f SSID dev wifi list | grep i) 
SELECTION=1 
while read -r line; do 
    echo "$SELECTION) $line" 
    ((SELECTION++)) 
done <<< "$IFACES" 
((SELECTION--)) 
echo 
printf 'Select an interface from the above list: ' 
read -r OPT 
if [[ `seq 1 $SELECTION` = $OPT ]]; then 
    sed -n "${OPT}p" <<< "$IFACES" 
    IFACE=$(sed -n "${OPT}p" <<< "$IFACES") #set interface 
else 
    echo "ERROR Selection not in list, rerun the script." 
    exit 0 
fi 
+1

Was denken Sie, 'seq 1 $ SELECTION' tut – janos

+0

Es druckt eine Sequenz von Zahlen nicht größer als $ SELECTION. – Crow

+0

Richtig also, wie könnte "$ OPT" (eine bestimmte Zahl) jemals gleich "1 2 3 4 5 ..." sein? –

Antwort

1

Versuchen Sie folgendes:

$ cat tst.sh 
mapfile -t ifaces < <(printf 'foo\nbar code\nstuff\nnonsense\n') 
for i in "${!ifaces[@]}"; do 
    printf "%s) %s\n" "$i" "${ifaces[$i]}" 
done 
printf 'Select an interface from the above list: ' 
IFS= read -r opt 
if [[ $opt =~ ^[0-9]+$ ]] && (((opt >= 0) && (opt <= "${#ifaces[@]}"))); then 
    printf 'good\n' 
else 
    printf 'bad\n' 
fi 

.

$ ./tst.sh 
0) foo 
1) bar code 
2) stuff 
3) nonsense 
Select an interface from the above list: d 
bad 

$ ./tst.sh 
0) foo 
1) bar code 
2) stuff 
3) nonsense 
Select an interface from the above list: 5 
bad 

$ ./tst.sh 
0) foo 
1) bar code 
2) stuff 
3) nonsense 
Select an interface from the above list: 3 
good 

Ersetzen Sie die printf mit Ihrem nmcli ... Befehl.

+1

Danke Ed, ich bin neu in diesem Bereich. – Crow

+0

Gern geschehen. Sie müssen eine Art Fundament bekommen, bevor Sie beginnen, Shell-Skripte zu schreiben, da es extrem leicht ist, es falsch zu verstehen, und die Fehler sind oft heimtückisch und folgen katastrophal. Versuchen Sie also, das Buch Shell Scripting Recipes von Chris Johnson zu lesen und durchsuchen Sie die Archive hier für Bash-Antworten von Stephane Chazelas oder Charles Duffy (es gibt andere, die genau die richtigen Antworten liefern, aber es gibt viele "Antworten", die völliger Unsinn sind und das sind meine 2 Go-Tos). –

+1

Danke nochmal Ed, werde ich tun. – Crow

Verwandte Themen