2016-04-02 3 views
0

Wie der Titel sagt, versuche ich, ein Programm, das eine Benutzereingabe hat eine Nummer 1-7, dann zeigt den entsprechenden Befehl für jede Nummer.Erstellen eines Programms, das Benutzereingaben für eine Nummer 1-7 benötigt und dann einen Befehl entsprechend der vom Benutzer gewählten Nummer anzeigt. [Bash - CentOS]

Das Problem, das ich habe, ist eine gute Möglichkeit, um jede Zahl auf einen Befehl festzulegen.

Zuerst dachte ich darüber nach, so etwas zu tun.

OSI=$(uname -a) 
echo $OSI 

Aber das Problem damit ist es tatsächlich in eine Schleife zu implementieren. Nehmen wir an, der Benutzer wie so aufgefordert wird:

"Enter a number:" 

Der Benutzer gibt die Nummer 1 und Nummer 1 ist die OSI. Nun, wenn ein Benutzer die Nummer 2 wählt, muss er einen anderen Befehl anzeigen und so weiter.

Dies ist ein bisschen zu kompliziert für einen Anfänger wie mich. Ich habe Foren und verschiedene Beiträge gelesen, aber ich kann die richtigen Befehle nicht finden, um dies zu ermöglichen.

habe ich versucht, so etwas wie dies zu tun und es kläglich gescheitert:

#!/bin/bash 

read -p "Enter a number:" n1 n2 n3 n4 n5 n6 n7 
if n1=1; then 
    uname - a 
else n2=2; "different command" 
fi 

Ich weiß, ich bash völlig Müll bin. Ich fordere niemanden auf, das zu lösen, gib mir nur einige Hinweise, die für mich Sinn ergeben.

Danke.

+0

Suchen Sie nach der 'case' Anweisung in der Manpage Ihrer Shell. –

+0

Sie können auch 'select' betrachten (was oft mit' case' verwendet wird, um diese Art menübasierter Schnittstelle zu implementieren). – chepner

+0

Der Fall Befehl scheint gut für mich zu arbeiten. Es scheint genau das zu sein, was ich brauchte. Vielen Dank. – darkfireinsanity

Antwort

0

Geben Sie diese getestete Version einen Versuch:

#!/bin/bash -- 

printf "menu items:\n 1) uname -a\n 2) date\n q) exit\n" 
read -p "Enter your choice: " response 

if [ -z "$response" ] ; then 
    printf "Choice invalid\n" 
    exit 1 
fi 
if [ "$response" = q ] ; then 
    exit 0 
fi 
if [ "$response" = 1 ] ; then 
    uname -a 
elif [ "$response" = 2 ] ; then 
    date 
else 
    printf "Choice invalid\n" 
fi 

Wie Fall von @EdMorton geschrieben ist eine bessere Option.

+0

Danke, ich benutze gerade den Fall Befehl und es funktioniert wirklich gut! – darkfireinsanity