Kommentar-Anteil

Kamikaze

Warrior of Sunlight
Staff member
Dieses kleine Skript spuckt den Kommentaranteil in einem Shell-Skript aus:
Code:
#!/bin/sh -f

apply -3 "sh -c 'echo %1: \$((%2 \* 100000 / %3 / 1000)).\$((%2 \* 100000 / %3 % 1000)) %'" $( (
	echo lines words bytes
	cat "$@" | grep -Exv '#\!.*|[[:space:]]*' | grep -E '^[[:space:]]*#' | wc
	cat "$@" | grep -Exv '\#!.*|[[:space:]]*' | wc
) | rs -t 3 3 | rs -e)

Beispiel:
Code:
> commentrate bsda_obj.sh
lines: 69.397 %
words: 85.833 %
bytes: 76.665 %
 
hi
und wieder ein gutes beispiel warum ich ganz von shell programmierung
weg bin.

echo
cat
wc
grep
alle mit eigenen optionen.
und bei meinem system (Debian) komplett unbekannt apply und rs.

und unter obsd bekannt somit kann ich das script nicht von a nach b kopieren.


holger
 
hi
und wieder ein gutes beispiel warum ich ganz von shell programmierung
weg bin.

Was nimmst Du stattdessen?

echo
cat
wc
grep
alle mit eigenen optionen.
und bei meinem system (Debian) komplett unbekannt apply und rs.

und unter obsd bekannt somit kann ich das script nicht von a nach b kopieren.

echo: in dem Script von Kamikaze kann ich keine esotherische Verwendung von echo sehen. Wenn man tatsaechlich mal irgendwelche echo-Features benoetigt, sollte man allerdings auf printf(1) ausweichen, das ist (im Gegensatz zu echo) standardisiert.

cat: wird hier ohne Optionen verwendet, wo ist also das Problem (abgesehen davon, dass es ein klassischer Fall von useless use of cat ist)?

wc: wird ohne Optionen verwendet und gibt exakt das aus, was es halt so zaehlt: Zeilen, Woerter, Zeichen. Wo ist da das Problem?

grep: wird im Script ausschliesslich mit standardisierten Optionen verwendet, also auich kein Problem. Ich haette es aber evtl. eher mit sed(1) versucht; bei zwei hintereinander gepipeten greps schrillen bei mir immer die Alarmglocken ;-)

apply und rs: harter Stoff, traditionell BSD und insofern tatsaechlich nicht portabel (hey, apply(1) kannte ich bis eben noch gar nicht).

Was die vielen verschiedenen Optionen bei verschiedenen Programmen angeht: nimm eine beliebige Programmiersprache (egal ob typlos und gescriptet oder mehr oder weniger streng typisiert und compiliert) und die dazugehoerenden Libraries, und Du wirst frueher oder spaeter auch auf Inkonsistenzen treffen, die dann auch nicht mehr repariert werden koennen, weil sonst etliche bereits existierende Programme bzw. Scripte die Graetsche machen.
 
cat: wird hier ohne Optionen verwendet, wo ist also das Problem (abgesehen davon, dass es ein klassischer Fall von useless use of cat ist)?
Ich habe gerade nicht daran gedacht grep -h zu verwenden.

grep: wird im Script ausschliesslich mit standardisierten Optionen verwendet, also auich kein Problem. Ich haette es aber evtl. eher mit sed(1) versucht; bei zwei hintereinander gepipeten greps schrillen bei mir immer die Alarmglocken ;-)
Leider kann man -v nicht mehr abschalten, sonst könnte ich ja mehrere Stufen mit -e machen.
 
Ich habe gerade nicht daran gedacht grep -h zu verwenden.
Zum Glueck hast Du nicht daran gedacht. -h ist eine Extension. Insofern ist das cat(1) schon fast wieder einigermassen in Ordnung (also nicht voellig useless), wenn man nicht gleich sed(1) statt grep(1) verwendet. Da hatte ich vorhin garnicht drauf geachtet.
 
hi

bitte mich nicht falsch verstehen , ich bin von shell sachen im grossen und ganzen
deswegen weg weil ich keinen bock mehr hatte all die verschieden parameter der
einzelen programme mir zusammen zusuchen .

das es teilweise deutliche unterschiede gibt in der shell so das scripte die z.b.
unter bash funktionieren / entwickelt wurden unter der ksh nicht laufen.

deswegen machen ich fast alles nur noch mit perl.

holger
 
Back
Top