[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: datei zerhacken und per netcat verschicken



Hallo,

Am Fri, 13 May 2005, Michelle Konzack schrieb:
>Am 2005-05-13 03:29:15, schrieb David Haller:
>> Am Fri, 13 May 2005, Michelle Konzack schrieb:
>> >Also hier wird nichts auch die Platte gekippt:
>> >----8<--------------------------------------------
>> >#!/bin/bash
>> >
>> >let SIZE=`cat $1 |wc -c`
>
>Das macht einen arithmetischen Wert daraus
>
>> useless use of let, useless use of cat
>> 
>> SIZE=`wc -c < "$1"`
>
>Das macht aber ne Zeichenkette

Stimmt ;) Da sollte 'declare' helfen, wenn man 'wc' nicht traut ;) Das
'cat' ist aber auch mit 'let' ueberfluessig.

Und fuetter deine Version mal mit nem Dateinamen, der z.B. ein '*'
enthaelt und wenn du in einem Verzeichnis bist, das passende
Dateinamen enthaelt. Quoten, quoten, quoten... *scnr*

Falls 'stat' vorhanden ist (bei mir nicht ;), ist "stat -c '%s'" wohl
die bessere Wahl.

>man bash
>
>Wenn Du Zeit hat den Schmöker mal durchzugehen.

*g* Hab ich nie, werde ich wohl auch nicht mehr. Ich hab das
abschnittsweise gelesen ;)

>Ich habe unzählige scripts in denen es zu unerwarteten
>fehlern bei Deiner Version kommt.

Ich keins (und ich hab durchaus einiges an scripten).

>Bei Deiner version kommt dann sowas wie "   1234" also eine Zeichen-
>ketteraus, während bei mir "1234" einer ein zahlenwert rauskommt.
>
>> >for SEEK in `seq 0 $SIZE` ; do
>> >  dd if=$1 of=- bs=584 seek=$SEEK count=1 |\

*rausred*
Das ist in diesem Falle unkritisch, da $SIZE _nicht_ gequoted ist und
IFS das Leerzeichen enthaelt... ;)

Achso, ansonsten vertrete ich "Quoten bis der Arzt kommt"... ;)

(siehe die andere Mail wg. seek vs. skip)
 
>> Da fehlt die Umrechung in die Bloecke (s.u.)... Du rufst so dd fuer
>> jedes byte auf...
>
>Ups, sollte
>
>    for SEEK in `seq 0 584 $SIZE` ; do
>    
>sein.

Ah!!! _Da_ hast du's versteckt. Immer diese bloeden unsichtbaren
Zeichen ;)

Dann ist's auch in deiner Version "blockweise", also richtig.

>> >    netcat -u -q 0 127.0.0.1 2006
>> >    if [ $? == "1" ] ; then break ; fi
>> 
>> Useless use of test (s.u.). Ausserdem sollte das, wenn schon, dann
>
>Nein, denn die Schleife rennt weiter wenn 'netcat'
>einen Fehler hat. 'break' beendet die Schleife.

Ja eben. 'netcat ... || break'. Ok, wenn netcat auch exit-codes groesser
1 zurueckgibt, bei denen man die Schleife weiterlaufen lassen will, ist
es nicht aequivalent... Jedenfalls:

    foo || break

ist ja (innerhalb einer while/for Schleife) gerade aequivalent zu:

    foo; if test $? -ne 0; then break; fi

wie ich schon schrieb.

Falls man _explizt_ Fehlercodes != 1 anders behandeln will, dann sollte
man die eben auch behandeln, also z.B. per

case $? in
    0) : ;;
    1) break;;
    2) exit;;
    3) panic;;
    *) continue;;
esac

oder wie auch immer... Ansonsten reicht aber eben das '|| break'.
 
>> Ja, bei sowas bin ich ein Pedant ;)
>
>Abgesehen vom 'seq' funktioniert mein Script

Jup ;)

Allerdings sind halt "funktioniert" und "gut" und "gut und portabel"
drei verschiedene Dinge (oder so)... *scnr*

Wobei ich explizit betonen will, dass ich nicht einmal andeuten will,
dass meine scripte/programme auch nur einen Deut besser waeren. ;)

-dnh

-- 
Jetzt kriege ich es echt mit der Angst: da gibt es Zeilen in meinem
Code der identisch mit dem von SCO ist, etwa ein "include
<stdio.h>" oder aber auch ein hinterlistiges "default:break;".
                                    -- Michael Karges in suse-linux



Reply to: