
Ich arbeite mit einem allgemeinen Bash-Menüskript:
#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice 3"
;;
"Quit")
break
;;
esac
done
Bei der Ausführung sieht es folgendermaßen aus:
1) Option 1
2) Option 2
3) Option 3
4) Quit
Please enter your choice:
Ich habe eine Datei namens list.txt:
Android
iOS
Windows
Wie schreibe ich das Bash-Menüskript, sodass die Optionen den Inhalt von list.txt darstellen:
1) Android
2) iOS
3) Windows
4) Quit
Please enter your choice:
Antwort1
Sie könnten ersetzen
options=("Option 1" "Option 2" "Option 3" "Quit")
mit
mapfile -t options < list.txt
options+=( "Quit" )
und passen Sie Ihre case
Muster an. Anstatt den Inhalt der $opt
Variable zu testen, könnten Sie verwenden $REPLY
, was die ausgewählte Nummer enthält und einfacher zu überprüfen ist.
Antwort2
Lesen Sie die Datei in ein Array:
#!/usr/bin/env bash
readarray -t list < list.txt
PS3='Please enter your choice or 0 to exit: '
select selection in "${list[@]}"; do
if [[ $REPLY == "0" ]]; then
echo 'Goodbye' >&2
exit
else
echo $REPLY $selection
break
fi
done