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: