Forum
Tipps
News
Menu-Icon

Suse: Unterschied bei zwei Scripten

Hallo,
kann mir hierbei Jemand helfen und mir den Unterschied zwischen den beiden folgenden Scripten erklären?
Ich verstehe einfach nicht, warum Script "2" nicht funktioniert.

1. Script:
 

Zitat
#!/bin/bash
find /tmp/testumgebung/ -name "*txt" -exec grep -il [email protected] {} \; > /tmp/testumgebung/inhalt.txt
filename='/tmp/testumgebung/inhalt.txt'
filelines=`cat $filename`
for line in $filelines ; do
    chmod 770 $line
done

2. Script:
 
Zitat
#!/bin/bash
find /tmp/testumgebung/ -name "*txt" -exec grep -il [email protected] {} \; > /tmp/testumgebung/inhalt.txt
for line in /tmp/testumgebung/inhalt.txt ; do
    rm -rf $line
done

Antworten zu Suse: Unterschied bei zwei Scripten:

Hi Rumak,
der Fehler in Script 2 liegt hier:

Zitat
for line in /tmp/testumgebung/inhalt.txt ; do
entweder:
$filelines oder
`cat $filename` oder
$(cat $filename) oder
`cat /tmp/testumgebung/inhalt.txt` oder
$(cat /tmp/testumgebung/inhalt.txt)

aber nicht nur den Dateinamen ;)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi,
wo der Unterschied zwischen den Scripten an sich existiert ist mir bewusst. Mir ging es eben nur darum, WARUM ich bei 

Zitat
for line in /tmp/testumgebung/inhalt.txt ; do
nicht gleich den Dateinamen verwenden darf?

Moin,

Syntax:

for variable in liste ; do
Anweisung(en)
done

Der Dateiname ist nicht die Liste.
mit `cat dateiname` erzeugst Du Deine Liste erst aus dem Inhalt der Datei.
Deshalb funktioniert es nicht.
Hoffe das ist jetzt verständlich.

Noch ein Rat am Rande:
Der Name "line" für die Variable ist sehr ungünstig. (denk mal an read line)
Wenn Du das Script noch erweiterst(so ist es ja noch wenig brauchbar) kann sowas schnell zur Unfreude werden.
Ist doch eine stinkordinäre Laufvariable ;)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

1.
 

Zitat
Der Dateiname ist nicht die Liste.
mit `cat dateiname` erzeugst Du Deine Liste erst aus dem Inhalt der Datei.
Deshalb funktioniert es nicht.
Hoffe das ist jetzt verständlich.
Klar und deutlich... nur wo steht denn so was? MANPAGE von "for" bestimmt nicht.
2. Sorry.... ich glaube du überschätzt an dieser Stelle mein Wissen  ;)
Was meinst du mit 
Zitat
(denk mal an read line)
3. 
Zitat
Ist doch eine stinkordinäre Laufvariable Wink
Cool... das habe ich nicht gewusst. Ich dachte "line" wäre hier Pflicht. Danke!

Ja, haste recht. Die Manpage hilft bei Programmiersachen nur weiter, wenn man schon einen gewissen Ansatz hat.

Habe Dich auch im ersten Post falsch verstanden, ich dachte Du hast beide Scripte gebaut und das Prinzip ist eigentlich klar und das ist nur ein Problem ala "ich habe den ganzen Tag Variablen deklariert und sehe den Wald vor lauter Bäumen nicht, schau mal bitte einer drüber" -> dies kenne ich selber nur zu gut  ;)

Richtige Erklärungen findet man sowohl in Fachliteratur wie auch im I-Net. Ich selber bevorzuge ersteres. Im I-Net muss man teilweise sehr lange und gründlich suchen, sowas steht meist auch nicht auf den ersten Seiten, Google-Ranking ist oft unergründlich, könnte man ein Buch mit füllen. ;D

read in Verbindung mit line wird auch in Verbindung mit dem zeilenweisen Einlesen aus einer Datei benutzt. In diesem Fall hat line eine besondere Bedeutung.

Es ist Usus (aber nicht Pflicht!) Laufvariablen einen einzelnen Buchstaben beginnend bei i zuzuweisen(weiter dann mit j,k, usw) Das hat den Hintergrund, dass auch jemand anderes der mit dem Script bzw. Quellcode konfrontiert wird, mit einem Blick sehen kann, dass das eben nur ne kurz benutzte Laufvariable ist. Solche Kleinigkeiten machen den Code lesbarer, ohne dass man ihn kaputtkommentieren muss. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Genial... danke dir vielmals für deine präzise Erläuterung! 


« Linux / Unix: Linux / Unix: Vodafone Surf Stick »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
AppleScript
AppleScript ist eine Programmiersprache von Apple für Skripte und Programme auf Systemebene. Im Gegensatz zu den Unix-Shellscripts, die seit OS X ebenfalls mögl...

Javascript
JavaScript ist eine weit verbreitete Skriptsprache, die ursprünglich von Netscape für das DOM-Scripting für Webseiten entwickelt wurde. Sie hat sich seitde...

PostScript
PostScript ist eine Programmiersprache zur Beschreibung von grafischen Objekten und Schriftzeichen zur Übertragung vom Computer zum Drucker oder Laserbelichter. Gene...