exportieren $ irgendwelche Variable = Wert
Dateien sind in allen Terminals nach Quelle verfügbar. Zu diesem Zweck werden Umgebungsvariablen in Bash -Dateien gespeichert.
Angenommen, der Benutzer muss Umgebungsvariablen mit Hilfe des SED -Befehls verwenden oder ändern. In diesem Fall können Benutzer den Befehl nicht wie oben erwähnt verwenden. Für den SED -Befehl müssen verschiedene Funktionen und Methoden verwendet werden. In diesem Artikel werden wir einige solche Methoden sehen, die wie folgt sind.
In der Linux-Befehlszeile ist SED ein wirksames Verarbeitungswerkzeug. Mit kompakten SED-Einzeiler führen Benutzer häufig einen Textersatz durch, was sehr bequem ist. Wenn Benutzer SED durch Shell -Variablen ersetzen, hat es auch einige Nachteile.
So verwenden Sie Umgebungsvariablen im SED -Befehl
Lassen Sie uns ein Beispiel haben, hier haben wir eine Datei mit dem Namen Test.txt.
Katzentest.txt
Current_time = # füllen Sie die
Aktuelles Datum und Uhrzeit
Java_Home = # füllen Sie die
Java_Home Pfad
Wir werden ein Shell -Skript schreiben, um den Pfad und die aktuelle Zeit für Java_Home im obigen aktuellen System zu bevölkern. Dieser Prozess ist einfach, aber es gibt einige Probleme, die möglich sind. Hier schreiben wir ein Skript mit Gnu sed.
Wie wir oben erwähnt haben, werden wir hier den Pfad und die aktuelle Zeit Java_Home ersetzen. Dazu werden wir zuerst die aktuelle Zeit hier an den richtigen Stellen füllen. Wir können den Befehl Datum verwenden, um die aktuelle Zeit zu erhalten.
Katzenlösung.Sch
#!/bin/sh
My_date = $ (Datum)
sed -i -r 's/^(current_time =).*/\ 1 $ my_date/'Test.txt
Das oben geschriebene Skript ist nicht allzu schwer zu verstehen. Wenn Sie den Befehl zuerst in einem variablen my_date ersetzen, erhalten Sie die Uhrzeit und das aktuelle Datum und speichern Sie ihn.
Nachdem der Benutzer die Daten mit SED -Substitution erhalten hat, füllt er sie in der Datei. Wir haben die Option -i -Option des Befehls gnu sed verwendet.
Jetzt werden wir unser Skript überprüfen und ausführen.
$ ./Lösung.Sch
$ CAT -Test.txt
Current_time = $ my_date
Java_home = # füllen Sie den Java_Home -Pfad
Wir sehen in der Ausgabe, dass die Linie mit "current_time =" ersetzt wurde. Das buchstäbliche „$ my_date“ wird jedoch statt der Zeit und des aktuellen Datums ausgefüllt.
Der Grund, warum Shell -Variablen nicht innerhalb einzelner Zitate erweitert werden, ist, dass wir einzelne Zitate unter dem SED -Befehl verwendet haben.
Im Befehl SED werden doppelte Anführungszeichen verwendet, um eine schnelle Expansion für die Variable der Schalen zu ermöglichen.
$ CAT -Lösung.Sch
#!/bin/sh
My_date = $ (Datum)
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"Test.txt
Jetzt werden wir die Lösung testen.SH Drehbuch wieder.
$ ./Lösung.Sch
$ CAT -Test.txt
Current_time = mi 2 27. Januar 22:02:05 PM CET 2021
Java_home = # füllen Sie den Java_Home -Pfad
Nachdem die Uhrzeit und das Datum an den richtigen Stellen gefüllt sind, wird der Pfad Java_Home gefüllt.
Wir sehen, welchen Trennzeichen wir verwenden sollten, indem wir unserer Lösung einen weiteren SED -Befehl hinzufügen.sh script.
$ CAT -Lösung.Sch
…
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"Test.txt
sed -i -r "s/^(java_home =).*/\ 1 $ java_home/"Test.txt
Überprüfen Sie das obige Skript.
$ ./Lösung.Sch
SED: -e Ausdruck Nr. 1, char 24: Unbekannte Option zu 's' '
Wir sehen, dass der neue SED -Befehl, der hinzugefügt wurde, nicht funktioniert. Wenn wir es zum zweiten Mal testen, sehen wir, dass nur seine Variable unterschiedlich ist, aber das Arbeiten mit dem SED -Befehl gleich ist. Um dies zu lösen, sollten wir die folgenden Maßnahmen ergreifen:
Der Trennzeichen existiert in der Variablen nicht
Um dies gut zu wissen, müssen Benutzer zunächst verstehen, was die Umgebungsvariable $ java_home enthält.
$ echo $ java_home
/usr/lib/jvm/Standard
Wir können sehen. Unser zweiter SED -Befehl erfolgt also nach einer variablen Ausdehnung.
sed -i -r "s/^(java_home =).*/\ 1/usr/lib/jvm/Standard/"Test.txt
Die Schrägstriche (/) im Wert der Variablen stören den Befehl 's' (S/Muster/Ersatz/), weshalb der obige SED -Befehl nicht funktioniert. Auf diese Weise können wir andere Zeichen als Grenzwerte des Befehls 's "auswählen.
Benutzer können den zweiten SED -Befehl leicht ändern, um dies zu lösen, indem Sie '#' als Trennzeichen des S -Befehls verwenden.
sed -i -r "S#^(java_home =).*#\ 1 $ java_home#"Test.txt
Jetzt testen wir das obige Skript.
$ ./Lösung.Sch
$ CAT -Test.txt
Current_time = Mi 2 27. Januar 22:36:57 PM CET 2021
Java_home =/usr/lib/jvm/Standard
Lösung 2
Lösung.SH funktioniert in den meisten Fällen. Wir sehen auch, dass '#' in Dateinamen ein gültiges Zeichen für die meisten *Nix -Dateisysteme ist. Wenn wir unser Skript in einem System auf Java_Home auf /opt /#JVM#ausführen, schlägt das Skript des Benutzers erneut fehl. Wir werden die folgende Arbeit für unser Skript erledigen, um in allen Fällen zu arbeiten
Benutzer können die Bash -Substitution verwenden, um dem Trennzeichen zu entkommen. Zum Beispiel kann der Benutzer allen '#' Zeichen in variablen $ var entkommen.
$ Var = "foo#bar#bla"
$ echo "$ var //#/\\#"
foo \ #bar \ #blah
Jetzt werden wir unser Skript hier anwenden.
$ CAT -Lösung.Sch
#!/bin/sh
My_date = $ (Datum)
sed -i -r "s/^(current_time =).*/\ 1 $ my_date/"Test.txt
sed -i -r "S#^(java_home =).*#\ 1 $ java_home //#/\\##"Test.txt
Wir werden testen, indem wir unser Skript mit der falschen Java_Home -Variablen ausführen, um festzustellen, ob es wie erwartet funktioniert.
$ Java_home =/opt/#/:/@/-/_/$/jvm ./Lösung.Sch
$ CAT -Test.txt
Current_time = dhu 28. Januar 11:23:07 Uhr CET 2021
Java_home =/opt/#/:/@/-/_/$/jvm
Wir schließen daraus, dass unser Drehbuch funktioniert, obwohl wir viele Sonderzeichen in unserer Variablen java_home haben.
Abschluss
In diesem Artikel haben wir gesehen, wie man Umgebungsvariablen mit dem SED -Befehl verwendet. Sie machen auch viele Fehler, die sie verursachen, die wir auch in diesem Artikel und in ihrer Behörde erwähnt haben. Wir hoffen, dass Sie aus diesem Artikel das vollständige Wissen erhalten, das Sie brauchen.