2017-10-17 3 views
0

Ich versuche, ein Bash-Skript zu erstellen, mit dem der Benutzer sowohl einen Menü-Stil als auch eine Befehlszeilen-Schalter-Stil-Schnittstelle verwenden kann. Ich habe mich gefragt, ob es einen Weg gibt, einen Parameter an eine Menüoption in select zu übergeben, als wäre es nur ein Argument für ein Skript. Zum Beispiel kann ich in meinem Skript eine Datei angeben, die in meinen Junk-Ordner verschoben werden soll, indem ich junk -d file.txt sage. Wenn der Benutzer jedoch keine Parameter angibt, sollte er die Option select verwenden. d. h. 1) move file 2) clear junk folder 3) watch folder usw.Wie Parameter mit Select in Bash übergeben werden

In diesem Menü möchte ich in der Lage sein, die Option zu schreiben und dann ein Argument an diese Option zu senden. Wie 1 filetobemoved.txt. Ich habe versucht, setzen $OPTARG nach der Methode, die durch das Menü aufgerufen wird, aber das scheint nicht zu funktionieren.

Hier ist der Code, den ich für das Menü im Moment habe, ich versuche, die Wiederherstellungsmethode aufzurufen und ein Argument (den Dateinamen) zu übergeben.

if (($# == 0)) 
then if (($OPTIND == 1)) 
then select menu_list in list recover delete total watch kill exit 
    do case $menu_list in 
    "list") list;; 
    "recover") recover $GETOPT;; 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
    done 
fi 

Danke für jede Hilfe.

Antwort

0

Geben Sie den Code ein, der die Fälle in einer Funktion ausführt. Dann können Sie nach der Befehlszeilenoption suchen und die select überspringen, und rufen Sie einfach die Funktion auf.

do_command() { 
    case "$1" in 
    "list") list;; 
    "recover") recover $GETOPT;; # had -a after recover 
    "delete") delete;; 
    "total") total;; 
    "watch") _watch;; 
    "kill") _kill;; 
    "exit") exit 0;; 
    *) echo "unknown option";; 
    esac 
} 
if (($# == 0)) 
then if (($OPTIND == 1)) 
    then select menu_list in list recover delete total watch kill exit 
     do do_command "$menu_list" 
     done 
    fi 
elif [[ "$1" = "-d" ]] 
then do_command delete 
... 
fi 
Verwandte Themen