pass spezielle Zeichen aus Eingabe-bash-Skript
Habe ich ein bash-Skript, das einfache ist das hinzufügen neuer Benutzer und melden Sie sich ein Passwort übergeben wird, wenn das Skript aufgerufen wird:
./adduser_script username password
und das Passwort wird dann verwendet, der als parameter in das Skript wie dieses:
/usr/sbin/useradd ... -p `openssl passwd -1 "$2"` ...
tritt das problem natürlich, wenn das Passwort enthält Sonderzeichen, wie $@, $* itd. Also, wenn ich rufen Sie das Skript:
/adduser_script username aa$@bbb
und nach Skript beendet Passwort sieht so aus: aabbb (also die speziellen Charaktere sind entnommen aus original-Passwort). Die Frage ist, wie kann ich mich richtig übergeben Sie das original-Passwort mit besonderen Charaktere für das Drehbuch?
Vielen Dank im Voraus,
Hinsichtlich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wahrscheinlich nicht in Ihrem Skript überhaupt, sondern, wie Sie es nennen. Zumindest von den snippets, die Sie bereitstellen, es scheint nicht, wie Sie das Passwort-Feld ausgewertet wird.
So, wenn Sie rufen Sie das Skript, wenn ein argument enthält, so etwas wie $a, bash ersetzen Sie es mit dem Wert der Variablen
a
oder ein leerer string, wenn es nicht gesetzt ist.Wenn
$
muss das Passwort ist, dann muss es in einfache Anführungszeichen gesetzt werden.haben Sie versucht, stark qoutes ??
verwenden 'aa$@bb' anstelle von schwachen Anführungszeichen gesetzt werden, d.h. "aa$@bb"
Beispiel: überprüfen Sie mit dem Befehl echo
während
In Ihrem Skript verwenden
nun müssen Sie nicht sorgen zu machen über die qoutes, indem Sie Ihr Passwort als argument.
/usr/sbin/useradd ... -p
openssl passwd -1 **'$2'**` ...` aber es funktioniert immer noch nicht. Shell-curry auf entfernen $@ aus dem original-Passwort. Lösung ist das hinzufügen von einzelnen Kontingenten das Kennwort beim Aufruf von Skript (genau wie Jacobo sagte): ./adduser_script Benutzername 'password$@aaa", aber ich Frage mich, ob es einen Weg gibt, es zu tun im script? Skript wird automatisch aufgerufen, mit Parametern (zB. Passwort) übergeben, von einem anderen remote-system. Vielen Dank für die schnelle Antwort 😉bash
verarbeitet den Befehl Linie (genauer gesagt, führt es parameter expansion auf$@
), bevor die Argumente an das Skript übergeben.Können Sie auch doppelte Anführungszeichen mit escape .
Zum Beispiel: set password "MyComplexP\@\$\$word"