
Ich muss eine Hausaufgabe für den Unterricht abgeben und kann nichts zum Thema „Ehrfurcht“ finden?
Die Aufgabe besteht darin, ein Skript mit einer Funktion namens „awe“ zu erstellen, die nach drei Fragen die Worte „Weil Linux großartig ist!“ wiedergibt.
Ich bin ganz neu in all dem und würde wirklich gerne Hilfe bekommen. Ich habe es versucht, awk
aber aus den Videos, die ich mir dazu angesehen habe, geht hervor, dass das nicht das ist, was er will. Danke.
Antwort1
Antworten mithilfe der Bash-Shell:
Die Aufgabe besteht darin, ein Skript mit einer Funktion namens „awe“ zu erstellen, die nach drei Fragen die Worte „Weil Linux großartig ist!“ wiedergibt.
Die Aufgabe lautet, eine Funktion zu erstellen. Mal sehen, wasdas Bash-Handbucherzählt uns vonFunktionen:
Shell-Funktionen sind eine Möglichkeit, Befehle für die spätere Ausführung unter Verwendung eines einzelnen Namens für die Gruppe zu gruppieren. Sie werden wie ein „normaler“ Befehl ausgeführt. Wenn der Name einer Shell-Funktion als einfacher Befehlsname verwendet wird, wird die Liste der mit diesem Funktionsnamen verknüpften Befehle ausgeführt. Shell-Funktionen werden im aktuellen Shell-Kontext ausgeführt; es wird kein neuer Prozess erstellt, um sie zu interpretieren.
Funktionen werden mit dieser Syntax deklariert:
name () compound-command [ redirections ]
oder
function name [()] compound-command [ redirections ]
Dies definiert eine Shell-Funktion namensName. Das reservierte Wort
function
ist optional. Wenn dasfunction
reservierte Wort angegeben wird, sind die Klammern optional. DasKörperder Funktion ist der zusammengesetzte Befehlzusammengesetzter Befehl(sehenZusammengesetzte Befehle). Dieser Befehl ist normalerweise einListeeingeschlossen zwischen { und }, kann aber jeder der oben aufgeführten zusammengesetzten Befehle sein, mit einer Ausnahme: Wenn dasfunction
reservierte Wort verwendet wird, die Klammern jedoch nicht angegeben werden, sind die Klammern erforderlich.zusammengesetzter Befehlwird immer dann ausgeführt, wennNamewird als Name eines Befehls angegeben.
Kurz gesagt ist eine Funktion eine Reihe von Befehlen, die unter einem von Ihnen angegebenen Namen gebündelt sind. Dieser Name ist der Name der Funktion.
Die Zuweisung sagt Ihnen, wie die Funktion benannt werden soll ( awe
), und was diese Funktion tun soll (Ausgabe „Weil Linux großartig ist!“). Um diese Nachricht auszugeben, können Sie verwenden echo
. Der echo
Befehl, den Bash als integrierte Shell bereitstellt, wird verwendet, um die Ausgabe anstdout
(Konsole). Mit diesen Informationen können Sie Ihre Funktion schreiben:
awe(){
echo "Because Linux is Awesome!"
}
Als nächstes müssen Sie den Befehl ausführen, nachdem Sie drei Fragen gestellt haben. Dazu können Sie den read
Befehl verwenden, der mehrere Optionsflags akzeptieren kann. Sehen wir uns an, was derBash-Handbuchsagt unsumread
:
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]
Eine Zeile wird von der Standardeingabe oder vom Dateideskriptor gelesenfd als Argument für die
-u
Option übergeben, aufgeteilt in Wörter wie oben beschrieben inWorttrennung, und das erste Wort wird dem ersten zugewiesenName, das zweite Wort zum zweitenName, und so weiter. Wenn mehr Wörter als Namen vorhanden sind, werden die verbleibenden Wörter und ihre dazwischenliegenden Trennzeichen dem letzten zugewiesenName. Wenn aus dem Eingabestrom weniger Wörter als Namen gelesen werden, werden den verbleibenden Namen leere Werte zugewiesen. Die Zeichen im Wert derIFS
Variablen werden verwendet, um die Zeile nach den gleichen Regeln, die die Shell für die Erweiterung verwendet, in Wörter aufzuteilen (siehe oben inWorttrennung). Der Backslash '\
' kann verwendet werden, um dem nächsten gelesenen Zeichen und der Zeilenfortsetzung besondere Bedeutungen zu entziehen. Wenn keine Namen angegeben werden, wird die gelesene Zeile der Variablen zugewiesenREPLY
.
read
akzeptiert mehrere Optionen. In diesem Fall sind zwei am relevantesten, da Sie dem Benutzer eine Frage stellen und eine Eingabe dafür erhalten möchten. Diese Optionen sind:
-r
→ Wenn diese Option angegeben ist, fungiert der Backslash nicht als Escape-Zeichen. Der Backslash wird als Teil der Zeile betrachtet. Insbesondere darf ein Backslash-Newline-Paar nicht als Zeilenfortsetzung verwendet werden.-p prompt
→ Anzeigeprompt, ohne abschließende neue Zeile, bevor versucht wird, eine Eingabe zu lesen. Die Eingabeaufforderung wird nur angezeigt, wenn die Eingabe von einem Terminal kommt.
Obwohl dies nicht die schlimmste Situation ist, in der man es vergessen kann -r
, sollte man es fast immer einschließen, um zu verhindern, \
dass es als Escape-Zeichen fungiert. -p
zeigt dem Benutzer eine Eingabeaufforderung an. Sie können beide Optionen nach einem einzelnen einfügen -
, also könnten Sie etwa Folgendes schreiben:
read -rp "Question? " variable
Die Benutzereingabe wurde in gespeichert variable
. Jetzt wollen wir diese Eingabe verwenden, indem wir sie in einen Satz aufnehmen, den wir an den Benutzer zurückgeben. Um variable
den darin enthaltenen Wert zu erweitern, setzen Sie ein $
davor. Dies funktioniert sogar innerhalb von Anführungszeichen.
echo "This is a reply to the user and it contains $variable!"
Normalerweise ist das alles, was Sie brauchen, um diese Aufgabe zu lösen. In meinem Beispielskript habe ich eine kleine Wendung hinzugefügt, um eine if
Bedingung zu verwenden, die darauf reagiert, ob die letzte Frage mit „ja“ oder „nein“ beantwortet wurde. Also schauen wir noch einmalif
Was uns das Handbuch über die Bedingungen sagt:
Die Syntax des
if
Befehls lautet:if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi
DerTestbefehleListe wird ausgeführt und wenn ihr Rückgabewert Null ist,Konsequente BefehleListe wird ausgeführt. WennTestbefehleeinen Status ungleich Null zurückgibt,
elif
wird jede Liste nacheinander ausgeführt, und wenn ihr Beendigungsstatus Null ist, wird die entsprechendeweitere Konsequenzenwird ausgeführt und der Befehl wird abgeschlossen. Wenn ' ' vorhanden ist und der letzte Befehl in der finalen oder Klausel einen Exit-Status ungleich Null hat, dannelse alternate-consequents
if
elif
alternative Konsequenzenausgeführt wird. Der Rückgabestatus ist der Beendigungsstatus des zuletzt ausgeführten Befehls oder Null, wenn keine Bedingung erfüllt ist.
Das, was test-command
ich in meinem Beispiel unten verwendet habe, ist [
, ein Shell-Integral, das auf bedingtes Wahr oder Falsch prüft. Wenn Sie verwenden [
, müssen Sie ein letztes Argument übergeben ]
. =
prüft Variablen auf Gleichheit als Zeichenfolgen.
Hier ist das Beispielskript:
#!/bin/bash
# function 'awe' to output "Because Linux is Awesome!"
awe(){
echo "Because Linux is Awesome!"
}
# asking three questions
read -rp "Enter your name!: " name
echo "Well, hello then $name!"
read -rp "How old are you?: " age
echo "Being $age makes you nearly as old as I am"
read -rp "Do you like Linux?: " likes_linux
# acting on if the last input is yes or something else in which case we assume no
if [ "$likes_linux" = "yes" ];then
awe
else
echo "Why don't you like Linux?"
fi