PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in Programmaufrufen innerhalb eines Shelscripts



RamsesII
03.05.02, 08:21
Hallo Leute, bräuchte mal kurz eure Hilfe.
Ich möchte mit folgender Schleife zeilenweise Daten aus einer Datei lesen, um diese dann weiter zu bearbeiten. Hab mir das in etwa so vorgestellt:


-code-
for ((; i <= ENDE; i=$[$i+1)); do
ZEILE=`"head -$i $DATEINAME|tail -1"`
# weitere Befehle #
done

Kriegs aber nicht hin die Variablen richtig aufzulösen. Durch die Anführungszeichen interpretiert mir diesen Syntax als kompletten Befehl und es kommt eine Fehlermeldung. Ich glaub' ich hab alle Varianten durch AHHHHH. Hat jemand nen Tip für mich ?

P.S.: Weiß jemand wie man die Zeichengröße von Strings ändern kann ? Will mir ein Programm bauen, was Dateien von Groß- auf Kleinschrift ändert. Hoffe man muß das nicht über eine umständliche Matrix machen.

Schon mal Danke für Eure Hilfe !
-RamsesII

tomes
03.05.02, 10:20
folgendes:
-----snip-----
i=0
cat Datei | while read i ; do
Befehle
done
-----snap-----
Man kann i natuerlich auch auf einen anderen Wert setzen um damit weiter zu arbeiten.

Was meinst du mit Zeichengroesse ?
Um alles in klein Buchstaben zu aendern, wuerd ich lieber Perl benutzen.

T;o)Mes

Tengri
03.05.02, 10:24
Zeilenweise aus einer Datei lesen und alles in Grossbuchstaben umwandeln würd ich so:


while read foo
do
echo "$foo" | tr "[a-z]" "[A-Z]"
done <$DATEINAME


hth
Tengri

RamsesII
03.05.02, 10:36
Danke Jungs, werd das mal testen !

-RamsesII

<<< Nachtrag >>>
Super Jungs, das Proggi läuft. Trotzdem würde nich interessieren warum meine Version nicht funktioniert. Ist ja schließlich nichts ungewöhliches Optionen per Variablen aufzurufen - oder ?

Auf jeden Fall nochmal Danke !

-Ramses II

zander
08.05.02, 06:15
for i in `cat file`; do echo "$i"; done

RamsesII
08.05.02, 09:25
Hmm, also OK Jungs, alle Eure Tips klappen ja wunderbar. Danke dafür. Aber meine Frage bezeiht sich eigentlich nur auf diese 1 Zeile:

ZEILE=`"head -$i $DATEINAME|tail -1"`

In der Variable $ZEILE soll halt die komplette Zeile abgelegt werden. Problem ist halt, das er hingeht und den String zwischen `` als kompletten Befehl ansieht und somit nicht kennt. Wenn ich die `` anders setze, werden die Variablen nicht aufgelöst und der Befehl kommt so wie beschrieben als "head -$i". Da head die Option -$i nicht kennt, geht es so auch nicht. Wenn Ihr mir sagt das es so nicht geht. OK.
Dachte nur das es ja eigentlich gehen müsste !

-RamsesII

zander
08.05.02, 10:59
ZEILE=`head -$i "$DATEINAME" | tail -1`

Lediglich der Dateiname muss in Hochkommata stehen, da er unter Umständen Leerzeichen enthalten kann.

zander
08.05.02, 11:02
Das Problem mit Deinem Ansatz ist allerdings, dass Die Bearbeitungszeit mit der Anzahl der Zeilen wächst, da Du für jede Zeile auch alle vorherigen einliest. Eie Bearbeitung langer Dateien mit Deinem Ansatz wird dadurch wesentlich länger dauern.

RamsesII
08.05.02, 11:27
OK, habe aufgrund der Tips schon eine bessere Lösung gefunden, das Proggi ist fertig und läuft auch. Ich nutze es um Dateien in einem beliebigen Ordner rekursiv umzubenennen. ( Groß- auf Kleinschrift )
Das Problem ist, das auf diesen Ordner sowohl über Samba als auch NFS erfolgt. Bei Zugriff über NFS muß aber alles in kleinschrift sein, sonst kann auf die Daten nicht zugegriffen werden. Und über Samba schleichen sich da halt schon mal Fehler ein. Da jede Datei aber in einem eigenen Ordner liegt und es ca. 1300 Files sind, währe das suchen und manuelle umbennen ziemlich mühsam ;-)

Habe nun letzlich so gelöst:

####
I=0
find $1 |while read I ; do
if [ "$2" = "-s" ] ; then
O=`echo "$I" | tr "[A-Z]" "[a-z]"`
else
O=`echo "$I" | tr "[a-z]" "[A-Z]"`
fi
if [ "$I" != "$O" ] ; then
mv $I $O
echo "mv $O $I" >> $UNDO
echo -n "."
fi
done
####

O.K. es gibt bestimmt noch elegantere Lösungen. Aber als Quereinsteiger fummelt man sich halt so zurecht. ;-)

( Nur gut das ich diesen Forum gefunden habe *lol* )

keiner_1
08.05.02, 12:55
sorry aber kannst du das bitte in mrunix.de posten, kann es leider nicht dorthin verschieben...

RamsesII
08.05.02, 13:27
???? Was soll ich da posten ???
Meine Frage ?
Oder willst Du das komplette Script ?

-RamsesII

keiner_1
08.05.02, 16:21
dieses Forum ist nicht für Fragen gedacht, sondern für Tipps!!!!