Re: [Vielleicht OT]Bash-Script-Programmierung
Hallo,
Am Mit, 12 Mai 2010, Peter Schütt schrieb:
>Ausschnitt aus meinem Skript, was das tut:
>
>for file in $ROOT/subdir/*.dat; do
Quoten!
for file in "${ROOT}/subdir/"*.dat; do
> DESTFILE=$ROOT/destdir/`basename $file`
Quoten!
DESTFILE="${ROOT}/destdir/`basename \"$file\"`"
Bash:
DESTFILE="${ROOT}/destdir/$(basename "$file")"
oder besser noch:
DESTFILE="${ROOT}/destdir/${file##*\/}"
> if [ -e $DESTFILE ]; then
Quoten!
if test -e "$DESTFILE"; then
Die '[ '+' ]'-Syntax finde ich irritierend und sie ist anfällig (wenn
man die Leerzeichen vergisst).
> DESTPREFIX=$ROOT/destdir/`basename $DESTFILE .dat`
Quoten und s.o.:
DESTPREFIX="${ROOT}/destdir/$(basename "$DESTFILE" .dat)"
Oder besser:
DESTPREFIX="${DESTFILE//.dat/}"
> N=2
> DESTFILE=`echo $DESTPREFIX`_$N.dat
Quoten!
DESTFILE="${DESTPREFIX}_${N}.dat"
> while [ -e $DESTFILE ]
Quoten und s.o.:
while test -e "$DESTFILE"; do
> N=$((N+1))
> DESTFILE=`echo $DESTPREFIX`_$N.dat
Quoten!
DESTFILE="${DESTPREFIX}_${N}.dat"
> done
> fi
> mv -v $file $DESTFILE
Quoten!
mv -v "$file" "$DESTFILE"
>done
Des weiteren ist das if .. fi überflüssig, du kannst direkt in die
while-Schleife:
DESTPREFIX="${DESTFILE//.dat/}"
while test -e "$DESTFILE"; do
...
done
Der var=${var//pat/subst} Befehl ist eh um vieles schneller als auch
nur ein einziger basename Aufruf.
>Zum einen würde ich gerne einmal die Meinung von erfahrenen
>Skriptprogrammierern zu diesem Code-Abschnitt hören, weil ich bei Skripten
>noch ein Neuling bin. Insbesondere interessiert mich, ob man die
>Konstruktion
> DESTFILE=`echo $DESTPREFIX`_$N.dat
>besser hinbekommen kann.
s.o.
>Weitere Fragen:
>
>Skript-Programmierung kommt mir als Java-Entwickler wie
>Steinzeitprogrammierung vor: Kein Debugger, keine IDE, keine Unit-Tests.
>Das Debugging bekommt man nur mit eingestreuten echos hin und Syntax-
>Highlighting ist die einzige Unterstützung, die ich finden konnte.
set -x
set -n
Am wichtigsten ist aber: Variablen immer quoten, wenn man nicht ganz
genau weiß was man tut und daß es anders nicht geht. Dann vermeidet
man schon grob 78,3914% [1] aller Fehler, die üblicherweise so
auftauchen.
-dnh
[1] es gilt das übliche bei statistischen Angaben ;)
--
264: Firewall
Firewalls schützen vor Viren, Trojanern, Kettenbriefen und
Taubenscheiße auf dem Autodach. (Martin Schmitt)
Reply to: