Kann ich ändern, wie Auswahloptionen angezeigt werden?

8

Ich arbeite mit Select und Case in Bash. Ich habe derzeit neun Optionen, was ein schönes, ordentliches 3x3-Raster von Optionen ergibt, aber es wird folgendermaßen angezeigt:

    1) show all elements  4) write to file      7) clear elements
    2) add elements       5) generate lines     8) choose file
    3) load file          6) clear file         9) exit

Ich würde es vorziehen, wenn es in Zeilen vor Spalten angezeigt wird:

1) show all elements  2) add elements    3) load file
4) write to file      5) generate lines  6) clear file  
7) clear elements     8) choose file     9) exit

Gibt es eine Möglichkeit, dies zu erreichen? Am besten etwas, das in einem Skript einfach ein- und auszuschalten ist, wie eine Shell-Option. Wenn es darauf ankommt, werden die Optionen in einem Array gespeichert und in den Fallblöcken durch den Index des Arrays referenziert.

OPTIONS=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit")

...

select opt in "${OPTIONS[@]}"
do
case $opt in
    "${OPTIONS[0]}")

...

    "${OPTIONS[8]}")
        echo "Bye bye!"
        exit 0
        break
        ;;

    *)
        echo "Please enter a valid option."
esac
done
user67459
quelle

Antworten:

7

Erstellen Sie Ihre eigene "Auswahl":

#!/bin/bash

options=("show all elements" "add elements" "load file" "write to file" "generate lines" "clear file" "clear elements" "choose file" "exit")
width=25
cols=3

for ((i=0;i<${#options[@]};i++)); do 
  string="$(($i+1))) ${options[$i]}"
  printf "%s" "$string"
  printf "%$(($width-${#string}))s" " "
  [[ $(((i+1)%$cols)) -eq 0 ]] && echo
done

while true; do
  echo
  read -p '#? ' opt
  case $opt in
    1)
      echo "${options[$opt-1]}"
      ;;

    2)
      echo "${options[$opt-1]}"
      ;;

    9)
      echo "Bye bye!"
      break
      ;;
  esac
done

Ausgabe:

1) Alle Elemente anzeigen 2) Elemente hinzufügen 3) Datei laden             
4) in Datei schreiben 5) Zeilen generieren 6) Datei löschen            
7) Elemente löschen 8) Datei auswählen 9) beenden                  
#? 
Cyrus
quelle