Batch sed Skript zur Verarbeitung von lsmod Ausgabe

Vektor

Lt. Commander
Registriert
Nov. 2004
Beiträge
1.640
Hallo werte CB'ler!

Ich habe ein kleines Skript welches ich bei Systemstart laufen lasse. Das hier ist nur das Grundgeruest aber alles worum es geht ist drin.

Code:
#!/bin/bash
modname=$1
if [ ! $(lsmod |grep -o $modname |sed -n -e '1s/'$modname'/1/p') ]
then
        /sbin/modprobe $1  
fi

Was das Skript erledigen soll ist, ueberpruefen ob ein bestimmtes Modul bereits geladen ist und wenn nicht das selbige Laden und noch mehr, aber darum geht es hier erst einmal nicht.
Wichtig ist: Ich moechte eine sed-Ausfuehrung von
Code:
lsmod |grep -o $modname |sed -n -e '1s/'$modname'/1/p'
haben.
Ausgabe soll 1 sein und zwar nur 1, wenn das Modul geladen wurde.
Die Implementation wie sie da steht funktioniert. Aber aus reiner Neugier wuerde ich gerne wissen wie man das ganze angeht um das
Code:
grep -o $modname
zu umgehen.
Andere Implementationen mittels head usw. gehen auch, interessieren mich aber nicht. Die Frage ist also ob sed allein die Ausgabe von lsmod entsprechend verarbeiten kann.

Um das vielleicht noch etwas mehr einzugrenzen, ich schaffe es die Ausgabe auf die Zeilen in denen das Modul steht zu beschraenken. Und auch das ganze dann auf eine Zeile einzugrenzen ist noch leicht. Aber das "Ausschneiden" des Modulnamens um diesen dann durch "1" zu ersetzen will mir nicht recht gelingen.

Vielleicht kann mir ja jemand einen Schubs in die richtige Richtung geben :D

Gruss,
Axel
 
Evtl. wäre awk besser geeignet, da du dort auch besserer mit Regular Expressions arbeiten kannst.
Muss mal schauen, in meiner Script Lib hab ich sicher noch so ein Fall.
 
Ja, das stimmt schon. Ich hatte das auch mit weniger Problemen mit awk schon geschrieben. Aber es ist die Neugier die mich dazu treibt das ganze mit sed zu machen ;)
 
Ich versteh den aufwand nicht ganz. Wieso machst du's nicht einfach so?

Code:
if ( lsmod | grep -q $modulname ); then
...
fi
 
Ich glaub eher, du verstehst nicht, was du willst.

/bin/false: exit code 1
/bin/true: exit code 0

Und negieren (!) tust du deins ja schon, das kennst du also auch.

Wie auch immer:

lsmod | sed -n -e "/^$modulname\s/ s/.*/1/p"
 
Zuletzt bearbeitet:
Eben doch. Ich habe ganz klar gesagt:
Ausgabe soll 1 sein und zwar nur 1, wenn das Modul geladen wurde.
Ueber Sinn und Unsinn dieses Skriptes soll sich hier jetzt nicht gestritten werden. Das ist auch nicht der Hintergrund.
Es geht mir hier um die Machbarkeit mittels sed. Ich weiss ganz genau, dass ich das Ergebnis auch einfacher erzielen kann.

Ob nun da im Skript "!1", "0" oder "217" steht ist ja egal.
 
Es ist in dem sinne egal, da [ "!1" ], [ "0" ] oder [ "217" ] alles true ist.
 
Zurück
Oben