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

Code: Select all

while read $1
do
  something
done
ü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)