Shell Script
Nils Kassube
kassube at gmx.net
Mon Nov 23 08:40:32 GMT 2009
Luise Kunkle wrote:
> Irgendwo habe ich gelesen, dass die shell unter ubuntu nicht mehr die
> bash ist und dass man darauf achten muss, was "da oben links" steht.
> Ist das bei meinem script ok?
Die Standardshell bei Ubuntu ist dash, soll heißen, dass /bin/sh ein
Link auf /bin/dash ist. Das Problem: Üblicherweise wurde bei älteren
Distributionen bash als Standard verwendet und viele Scripte verwenden
Eigenheiten der bash obwohl sie mit "#!/bin/sh" beginnen. Wenn man aber
Besonderheiten der bash verwenden will, muss man die bash auch explizit
angeben mit "#!/bin/bash". Solange du nur die bei allen Shells
vorhandenen Funktionen verwendest, ist "#!/bin/sh" aber OK. Womit das
Script beginnt, ist also abhängig davon, welche Funktionen du verwenden
willst. Ich habe mir angewöhnt, immer "#!/bin/bash" zu verwenden, damit
ich nicht immer wieder recherchieren muss, was die Standardshell nun
kann oder nicht.
> Wie man sieht, will ich, dass der gleiche Vorgang immer wiederholt
> wird - ich habe das zwar (in etwa) hin bekommen - aber ich weiß,
> dass es "eleganter" geht. Bin aber auf der Suche nach der syntax
> verzweifelt.
>
> Weiß jemand die syntax, damit das Programm immer die nächst höhere
> Zahl in die Klammer setzt, bis keine "nächst-höhere" mehr da ist?
Du meinst die Zahl im Suchausdruck? Das könnte dann so aussehen
(ungetestet):
sgrep '"]" .. "[t]"' $sourcefile > $goalfile ; #fuer toxisch
declare -i n=1
while sgrep '"]" .. "['$n']"' $sourcefile >> $goalfile ; do
n=$n+1
done
Das geht aber schonmal nicht mit der dash, denn Integer-Variablen kann
man dort mit declare nicht festlegen, also wird das "#!/bin/bash" am
Scriptanfang benötigt. Wenn du es portabel haben willst (mit
"#!/bin/sh"), sähe das eher so aus (auch ungetestet):
n=1
while sgrep '"]" .. "['$n']"' $sourcefile >> $goalfile ; do
n=$(( $n + 1 ))
done
> Die Zieldatei soll natürlich nicht immer wieder überschrieben werden,
> sondern es soll angehängt werden,* nach 2 Zeilenumbrüchen*. Was muss
> ich da schreiben?
Hmm, da habe ich nun nicht verstanden, was du meinst. Mit >> fügst du
doch schon ans Ende der Datei an ohne sie zu überschreiben.
Nils