Ich habe ein Bash-Skript, das ich zum Aufruf einer Java-Klasse verwenden, und ich übergebe zwei Argumente an diese Java-Klasse. Das erste Argument ($ 1) ist die Zeichenfolge, die ich übergebe und die den Namen einer Person enthält. Das zweite Argument ($ 2) ist der Vormonat als zweistellige Zahl (ebenfalls vom Benutzer übergeben).Übergabe eines Arguments in einem Bash-Skript
So wird die Java-Klasse wie folgt aufgerufen:
java -DCONFIG_DIR=... com.example.myapp.grades.gradingProcess $1 $2
Aber jetzt, ich im zweiten Argument nicht der Benutzer möchte, und ich möchte den Monat, um zu bestimmen das Skript stattdessen zu übergeben.
Kann ich so etwas tun?
month=`date +'%m' -d 'last month'`
java -DCONFIG_DIR=... com.example.myapp.grades.gradingProcess $1 $month
Und wenn ich meinen Skript ausführen, wird es so etwas wie dieses: ./myscript.sh ‚John‘ und nicht in einem zweistelligen Monat passieren, da ich es schon im Skript täte ?
Oder ist das nicht der richtige Weg? Tut mir leid, wenn das wie eine elementare Frage erscheint, ich versuche immer noch, mich an Bash-Skripte zu gewöhnen.
Vielen Dank?
Ja, das sollte funktionieren. Ein Vorschlag: Wenn der Name einer Person ein Leerzeichen enthalten kann, müssen Sie $ 1 in doppelte Anführungszeichen setzen, damit sie als einzelnes Token übergeben wird. (Der Benutzer muss auch doppelte Anführungszeichen verwenden.) –
@JuanTomas - Nicht nur * wenn * Sie Leerzeichen erwarten; Wenn Sie richtiges Quotieren durchführen, auch wenn Sie nicht erwarten, dass Sie es brauchen, werden Sie Bugs vermeiden, wenn Ihre Erwartungen falsch waren. (Ich habe tatsächlich ein massives Datenverlust-Ereignis gesehen, nachdem jemand entschieden hatte, keine Variablenerweiterung anzugeben, von der erwartet wurde, dass sie nur Dateinamen enthält, die zu '[0-9a-f] {24}' passen - ein Pufferüberlauf hat einen String mit einem Leerraum umgeben Sternchen in einen Namen, ein schlecht geschriebenes Skript versucht, diese Datei zu löschen, und Katastrophe folgte. –
@JuanTomas, also muss ich $ Monat nicht in Anführungszeichen setzen, richtig? Auch weiß ich in der Tat, dass ich nur in einem Wort Namen (keine Leerzeichen) weitergeben werde, aber danke für die Köpfe hoch! Ich werde mir das merken. – user3266259