Hallo zusammen,
ich kämpfe schon ein paar Tage mit folgendem Problem, nun muss ich Euch um Rat fragen:
Mein bash-script soll eine Datei durchsuchen, Zeilen mit bestimmten Wörtern herausfiltern und analysieren. Ich mache das mit folgendem script (Erklärung darunter):
Die zu parsende Quelldatei ist "~/profile.ini", die Profile-Datei von Firefox (Pfad oben zur Veanschaulichung gekürzt):
Ich suche die höchste Profilnummer in dieser Datei. Dazu interessieren mich nur die Zeilen, die [Profile*] enthalten. Die filtere ich mit grep und schicke sie als $t in die while-Schleife. Dort schneide ich [Profile und ] ab, so dass $t nur noch die Profilnummer ist. Diese vergleiche ich mit $COUNTER, um $COUNTER ggf. zu erhöhen.
Das funktioniert zunächst auch, aber $COUNTER nimmt seinen alten Wert (0) wieder an, sobald man die Schleife verlässt. Während also in der Schleife $COUNTER brav die Werte 1 und 2 annimmt (echo "in loop" ergibt 1 und 2), ist das nach der Schleife wieder vergessen (echo "after loop" ist wieder 0).
Ich habe nun schon eine ganze Weile probiert und gesucht (auch hier), aber leider keine Lösung gefunden. Könnt Ihr mir bitte helfen?
Meine Fragen:
1) Wie musss ich die Variable deklarieren, dass mir das Ergebnis $COUNTER auch nach der Schleife zur Verfügung steht?
2) (Bonusfrage ;-) WARUM ist das so? Es liegt doch bestimmt an der pipe, oder?
Vielen Dank schon vorab für Eure Hilfe!
Markus
ich kämpfe schon ein paar Tage mit folgendem Problem, nun muss ich Euch um Rat fragen:
Mein bash-script soll eine Datei durchsuchen, Zeilen mit bestimmten Wörtern herausfiltern und analysieren. Ich mache das mit folgendem script (Erklärung darunter):
Code:
COUNTER=0
grep -e "^\[Profile" "~/profile.ini" | while read t # send lines with "[Profile" to a while loop
do
t=${t#"[Profile"} # cut off beginning of line
t=${t%"]"} # cut off end of line (it remains a decimal number)
if [[ $t -ge $COUNTER ]] # if the decimal is >=$COUNTER increase $COUNTER accordingly
then
let "COUNTER=t+1"
echo "in loop: "$COUNTER # debugging info
fi
done
echo "after loop: "$COUNTER # debugging info
Code:
...
[Profile0]
Name=default
IsRelative=1
Path=12345678.default
Default=1
[Profile1]
Name=test
IsRelative=1
Path=23456789.test
...
Das funktioniert zunächst auch, aber $COUNTER nimmt seinen alten Wert (0) wieder an, sobald man die Schleife verlässt. Während also in der Schleife $COUNTER brav die Werte 1 und 2 annimmt (echo "in loop" ergibt 1 und 2), ist das nach der Schleife wieder vergessen (echo "after loop" ist wieder 0).
Ich habe nun schon eine ganze Weile probiert und gesucht (auch hier), aber leider keine Lösung gefunden. Könnt Ihr mir bitte helfen?
Meine Fragen:
1) Wie musss ich die Variable deklarieren, dass mir das Ergebnis $COUNTER auch nach der Schleife zur Verfügung steht?
2) (Bonusfrage ;-) WARUM ist das so? Es liegt doch bestimmt an der pipe, oder?
Vielen Dank schon vorab für Eure Hilfe!
Markus