ubuntuusers.de

Grep auf Variable anwenden?

Status: Gelöst | Ubuntu-Version: Ubuntu 9.04 (Jaunty Jackalope)
Antworten |

DetlefKL

Avatar von DetlefKL

Anmeldungsdatum:
30. September 2009

Beiträge: 86

Wohnort: Aargau

Hallo liebe Linuxgemeinde,

Ich über mich gerade in der Shell-Programmierung und verzweifle an dem Befehl Grep. Mit: lsof -i :22 | grep ssh kann ich mir alle SSH-Verbindungen anzeigen lassen. Das klappt prima. Nun möchte ich in einem Script das gleiche mit einer Variablen machen. Beispiel:

!#/bin/bash

a=$(lsof -i :22)

b=$( $a | grep ssh ) !!!!! Klappt nicht!! 😐

auch das Durchsuchen der /var/log/auth.log mit grep bekomme ich nicht hin.

Nun die Frage: Ist es überhaupt möglich grep auf Variablen anzuwenden und wenn ja wie, mit welcher Syntax?

Gruß Detlef...

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

$a | grep ssh kann natürlich nicht funktionieren, da hier versucht wird, $a als Befehl zu benutzen. Und was willst Du eigentlich erreichen? grep ist für Dein Vorhaben (das Du uns leider nicht beschrieben hast) wahrscheinlich ungeeignet. lsof -a -i -c /ssh$/ liefert beispielsweise eine Liste der Sockets, die der ssh-Client geöffnet hat.

Und welche Probleme hast Du damit, eine einfache Textdatei mit grep zu durchsuchen? Die Syntax dafür ist so simpel wie es geht: grep blabla /var/log/auth.log.

Lux Team-Icon

Avatar von Lux

Anmeldungsdatum:
10. November 2005

Beiträge: 5152

Wohnort: Grüt (Gossau ZH), Schweiz

DetlefKL schrieb:

b=$( $a | grep ssh ) !!!!! Klappt nicht!! 😐

Warum nicht: b=$(lsof -i :22 | grep ssh)

auch das Durchsuchen der /var/log/auth.log mit grep bekomme ich nicht hin.

Das ist aber kein Problem, die Frage ist was Du als Ergebnis erwartest.

Nun die Frage: Ist es überhaupt möglich grep auf Variablen anzuwenden und wenn ja wie, mit welcher Syntax?

grep ist für Datenströme oder Dateien, nicht für Variablen.

Gruss

Dirk

Ltd_Commander_Data

Anmeldungsdatum:
17. Oktober 2009

Beiträge: Zähle...

DetlefKL schrieb:

Hallo liebe Linuxgemeinde,

Ich über mich gerade in der Shell-Programmierung und verzweifle an dem Befehl Grep. Mit: lsof -i :22 | grep ssh kann ich mir alle SSH-Verbindungen anzeigen lassen. Das klappt prima. Nun möchte ich in einem Script das gleiche mit einer Variablen machen. Beispiel:

!#/bin/bash

a=$(lsof -i :22)

b=$( $a | grep ssh ) !!!!! Klappt nicht!! 😐

auch das Durchsuchen der /var/log/auth.log mit grep bekomme ich nicht hin.

Nun die Frage: Ist es überhaupt möglich grep auf Variablen anzuwenden und wenn ja wie, mit welcher Syntax?

Gruß Detlef...

Soweit ich das sehe, solltest du bei der Zuweisung von a das $ nicht benutzen, also verwende a="lsof -i :22". Denn wenn du das Dollarzeichen verwendest, weist er a das Ergebnis des Kommandos lsof -i :22 zu, das ist dann aber kein Kommando mehr! Und da das kein Kommando mehr ist, kannst du es auch nicht in die Pipe schicken. Probier mal:

a="lsof -i :22"
b=$( $a | grep ssh)

TBC2

Anmeldungsdatum:
27. Februar 2008

Beiträge: 98

Wohnort: ~/.

Meiner Meinung nach sollte folgendes funktionieren:

1
b=$(echo $a | grep ssh)

qed

DetlefKL

(Themenstarter)
Avatar von DetlefKL

Anmeldungsdatum:
30. September 2009

Beiträge: 86

Wohnort: Aargau

Vielen Dank für eure Lösugen!!! Jetzt klappt es!! Und ich habe wieder was dazugelernt 👍 Auf die Idee das $ bei dem a wegzulassen wäre ich nie gekommen weil ich meinem Buch was ich mir zugelegt habe die Übergabe eines Befehl an eine Variable ausdrücklich mit $ gekennzeichnet ist.. Tja das Teil taugt eh nicht wirklich was. Viel zu allgemein.. Sollte mir mal was anderes zulegen..

Gruß Detlef....

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

DetlefKL schrieb:

Vielen Dank für eure Lösugen!!! Jetzt klappt es!! Und ich habe wieder was dazugelernt 👍 Auf die Idee das $ bei dem a wegzulassen wäre ich nie gekommen weil ich meinem Buch was ich mir zugelegt habe die Übergabe eines Befehl an eine Variable ausdrücklich mit $ gekennzeichnet ist.. Tja das Teil taugt eh nicht wirklich was. Viel zu allgemein.. Sollte mir mal was anderes zulegen..

Du verstehst nicht. a="irgendwas" bedeutet etwas völlig anderes als a="$(irgendwas)". Bei der ersten Variante wird enthält a hinterher den Wert "irgendwas". Bei der zweiten Variante wird "irgendwas" als Befehl interpretiert und ausgeführt, und die Ausgabe dieses Befehls wird in der Variablen a gespeichert. Wenn man in der Shell also

a="lsof -i :22"
b=$($a | grep ssh)

ausführt, dann enthält $a die ganze Zeit den String "lsof -i :22". Erst in der zweiten Zeile wird der String als Befehl interpretiert, ausgeführt und die Ausgabe durch grep geleitet.

DetlefKL

(Themenstarter)
Avatar von DetlefKL

Anmeldungsdatum:
30. September 2009

Beiträge: 86

Wohnort: Aargau

Hallo Hello World,

Vielen Dank für deine genauen Ausführungen. Du bist ja richtig Fit in Sachen Shell. Jetzt habe ich es verstanden!!

Habe jetzt:

a=$(lsof -i :22)

b=$(echo $a | grep ssh)

so klappts.

Deinen Befehl lsof -a -i -c /ssh$/ liefert keine Ausgabe auf meinem System. Hatte ihn mal ausprobiert..

Gruß Detlef....

Antworten |