Page 1 of 1
[bash scripting] stdin aus file
Posted: 2003-06-12 17:13
by ganjasmokerjoe
Hi Freaks!
ich habe ein Bash Script welches Aktionen auf den Kunden Domains ausfürt. Allerdings will ich jetzt die Domains aus einer Datei oder via ls /www/kunden/ | sort | xyz_exec.sh ins Script bekommen.
Bis jetzt habe ich diese probleme wie folgt in Perl gelöst:
Code: Select all
#!/usr/bin/perl
while(<STDIN>){
@pwd=split(/:/,$_);
print "Repariere - User: $pwd[0], Server: $pwd[4], Home: $pwd[5]";
#blablabla
#blablabla
#blablabla
#blablabla
#blablabla
#blablabla
#blablabla
#blablabla
print "n";
}
#EOF
wie kann ich das in der bash lösen?
Ich bin leider bei meinem Problem auf die Bash Angewiesen und kann Perl hier nicht verwenden.
Hab jetzt ein bischen getestet aber nichts rausgefunden, ich weiss eigentlich wie es geht nur kann ich mich bei diesem scheiss wetter nicht errinern :(
vielen dank für nen kleinen dank anstoss
Re: [bash scripting] stdin aus file
Posted: 2003-06-12 17:40
by captaincrunch
Wie wär's denn hiermit :
Code: Select all
#!/bin/sh
while read WASAUCHIMMER
do WASAUCHIMMER
done
Nicht getestet, da ich nicht genau weiß, was aus der Pipe kommt ...
Re: [bash scripting] stdin aus file
Posted: 2003-06-12 18:22
by ganjasmokerjoe
danke für den tipp allerdings hab ich jetzt variabeln probleme...
ich verliere den inhalt der übergeben wird :(
habs auch mit file angaben versucht, will auch nicht klappen
Code: Select all
#!/bin/bash
while read $1
do
domain=$1
monat=5
echo "${traffic} KB Traffic im ${monat}.2003 der Domain ${domain}"
done
ich habe alles mögliche versucht, es gelingt mir einfach nicht die eingaben oder dateien zu verarbeite.....
hmmm, was nun?
google weiss leider auch nichts
Re: [bash scripting] stdin aus file
Posted: 2003-06-12 21:36
by dea
ganjasmokerjoe wrote:danke für den tipp allerdings hab ich jetzt variabeln probleme...
ich verliere den inhalt der übergeben wird :(
habs auch mit file angaben versucht, will auch nicht klappen
Code: Select all
#!/bin/bash
while read $1
do
domain=$1
monat=5
echo "${traffic} KB Traffic im ${monat}.2003 der Domain ${domain}"
done
ich habe alles mögliche versucht, es gelingt mir einfach nicht die eingaben oder dateien zu verarbeite.....
hmmm, was nun?
google weiss leider auch nichts
Aber ich ;)
Nimm bloß nich $1 bzw. generell $
n! Dabei handelt es sich nämlich um die dem Skript übergebenen sog. 'positional Parameters' (man bash) bzw. gibt $0 den vollständigen Aufruf zurück.
Mit Deiner Zeile
überschreibst Du die Aufrufparameter und verlierst sie somit.
Wenn Du die Eingabedaten in Dateiform vorliegen hättest (ls /www/kunden/ | sort > /pfad/zur/datei) böte sich folgende Vorgehensweise an:
Code: Select all
./skript.sh /pfad/zur/datei
# im Skript dann entweder:
cat ${1} | while read line
do
something ${line}
done
# oder auch:
while read line
do
something ${line}
done < ${1}
Es gibt natürlich noch mehr Möglicheiten, das sind aber die "Klassiker". "line" ist kein Befehl oder irgendwas spezielles, es ist lediglich ein Variablenname. Bewährt hat es sich, für diese Variable(n) einen aussagkräftigen Namen zu verwenden. Du kanns auch mehrere Variablen in der Zeile verwenden, Trenner ist dann $IFS (std. ein Leerzeichen oder ein Tab), sowas macht zum Beispiel mit einer *.csv oder *.tsv sehr viel Spass :)
Re: [bash scripting] stdin aus file
Posted: 2003-06-12 22:01
by ganjasmokerjoe
Hi!
Variante 1 klappt Super, Variante 2 liefert leider nur müll auf die console aber ich bin auch mit Variante 1 zufrieden.
Vielen Dank für den entscheidenden tipp :-D
Re: [bash scripting] stdin aus file
Posted: 2003-06-12 22:46
by dea
ganjasmokerjoe wrote:Hi!
Variante 1 klappt Super, Variante 2 liefert leider nur müll auf die console aber ich bin auch mit Variante 1 zufrieden.
Vielen Dank für den entscheidenden tipp :-D
Gerne, beim bash-Skripten helfe ich gerne :)
Es kann sein, dass Variante 2 fehlerhaft ist, das läge dann daran, dass ich persönlich wg. besserer Lesbarkeit immer Variante 1 verwende (funktional sind beide gleich)