Grundsätzlich rufen Sie mein Bash-Skript auf, indem Sie mybashscript
in die Konsole tippen. Dann geht es los:
Welcome to mybashcript! Choose an option (login|logout|view|erase|quit|):
Der Benutzer gibt dann die gewünschten Eingaben ein, die dann ein Python-Skript weiter unten in der jeweiligen if-Struktur der jeweiligen Option aktivieren.
Was ich mich wundere ist, wie kann ich es so machen, dass der Benutzer nur etwas wie mybashscript login
oder eingeben muss (wenn er das Programm vorher benutzt hat) mybashscript view
.
Jedes Wort, das nach dem Namen des Bash-Skripts hinzugefügt wird, wird dann als erste Eingabe im Skript selbst verwendet. Ist das möglich?
Hier ist mein Skript, ich verstehe nicht genau, wie man $ 1 einfügt, ohne es auch fragen zu lassen, ob es kein Argument gibt.
#!/bin/bash
echo -n "Hello $USER, welcome to the guestbook! Choose an option (sign|view|save|erase): "
read option
if [ "$option" == "sign" ]; then
python /usr/local/bin/guestbook.data/sign_guestbook.py
elif [ "$option" == "view" ]; then
python /usr/local/bin/guestbook.data/view_guestbook.py
elif [ "$option" == "save" ]; then
python /usr/local/bin/guestbook.data/save_guestbook.py
elif [ "$option" == "erase" ]; then
python /usr/local/bin/guestbook.data/erase_guestbook.py
else
echo "Sorry, I didn't understand that."
fi
shift
löscht der Befehl $ 1 und verschiebt die anderen nach unten, $ 2 wird zu $ 1, $ 3 wird zu $ 2…Antworten:
quelle
In Ihrem Bash-Skript
$1
ist das erste Argument$2
das zweite Argument und so weiter.zB wenn Sie folgendes in
test.sh
:Dann erhalten Sie folgendes:
quelle
Sie können Eingaben von der Befehlszeile übernehmen und an Ihr Programm weitergeben, indem Sie $ 1 (für das erste Wort nach dem Befehl), $ 2, $ 3 usw. verwenden.
Angenommen, Sie haben dieses Bash-Skript (Dateiname: Testscript) geschrieben:
Dies ist die Ausgabe, wenn das Skript von einem Benutzer von der Konsole aus aufgerufen wird (denken Sie daran, x Berechtigungen hinzuzufügen, damit das Skript von der Shell ausgeführt werden kann und platzieren Sie das Skript in / usr / local / bin /):
Vielen Dank für all Ihre Hilfe, die mich in die richtige Richtung gebracht hat. Folgendes habe ich für meinen speziellen Fall getan, wenn Sie neugierig waren: Es ist vielleicht nicht der beste oder eleganteste Weg zu Bash Script, aber ich habe gerade erst angefangen !:
quelle
Soweit ich weiß, möchten Sie Befehlszeilenargumente abrufen.
Nehmen Sie das folgende Beispiel:
$1
Stellt das erste Befehlszeilenargument dar, das an Ihr Programm übergeben wird.Wenn wir das obige Skript aufrufen (verwenden wir den Namen, den Sie in Ihrer Frage hatten
mybashscript
), mitlogin
als ArgumentWir erhalten die Ausgabe unten:
Wenn mehrere Argumente gegeben sind, können Sie sie mit Zugang
$2
,$3
... und so weiter. Das ist aber nur dann sinnvoll, wenn Sie eine feste Anzahl von Argumenten haben. Wenn Sie eine variable Anzahl von Argumenten verwenden möchten, überprüfen Sie diesen Beitrag auf StackOverflow.quelle
Testen des Codes:
Erläuterung:
[[ "$1" =~ ^(sign|view|save|erase)$ ]];
Testet die Eingabe mit regulären Ausdrücken, um präziseren Code anstelle einerif-else
Leiter zu erhalten. Das$1
bezieht sich auf das erste Positionsargument, das diese Funktion erhält, nicht auf das Skript selbst. Der Test für[ -n "$1" ]
soll nur das druckenSorry
Anweisung , wenn Eingaben eingegeben wurden.launch "$1" && exit
versucht, über nach Eingaben zu suchen$1
. Wenn dies erfolgreich ist, wird das Skript beendet.Annahmen:
if launch "$option"; then ...
es funktioniert. Wenn diese Annahme falsch ist und die Prüfung der Ausgangsbedingungen nicht verbessert wird, stecken wir in einer Schleife.$1
, um das richtige Skript in der Art und Weise zu starten${1}_guestbook.py
.quelle