array in /bin/sh script

Gast #1654775
Lesenswert?

ich will umgebungsvariablen eines scripts in einer textdatei abspeichern 
und bei erneutem ausführen damit arbeiten können.

mein kleines testscript für die bash sah so aus
1
#!/bin/bash
2

3
n=0
4
j=0
5

6
#funktionen
7
save_var_in_file() {
8
  var=$1
9
  echo $var >> variablen
10
return
11
}
12

13
#auslesen der datei
14
while read zeilen_inhalt ; do    
15
  zeilen[$n]="$zeilen_inhalt"
16
  n=`expr $n + 1`
17
done < variablen
18

19

20
#die variablen werden im script bearbeitet
21
zeilen[1]=1
22
zeilen[4]=1
23

24
#die bearbeiteten werte in datei schreiben
25
rm variablen
26
while [ $j -le $n ] 
27
do
28
  save_var_in_file ${zeilen[j]}
29
  j=`expr $j + 1`
30
done

ich lese also zu beginn meine textdatei ein, ändere die variablen im 
script und schreibe sie am ende in die datei. wenn ich meine testdatei 
vorher mit 8 nullen gefüllt habe waren die nullen in zeile 1 und 4 auch 
nacher brav einsen.


jetzt zum problem. das ganze soll nicht in einer bash sondern unter 
/bin/sh laufen. der selbe code hat dort aber probleme mit den arrays

./script.sh: zeilen[1]=1t: not found

wie löse ich das am besten?
#1654783
Lesenswert?

Natürlich.
Du brauchst doch gar nicht die ganze Datei im Speicher halten.
Es geht ohne Felder, wenn du zeilenweise liest, deine Änderungen
oder die Originalzeilen in eine andere Datei speicherst und
zum Schluß das Original wegwirfst und durch die Kopie ersetzst.

Ohne eigenes Programmieren geht es auch mit awk oder sed,
falls das auf deinem Superrechner installiert ist.
#1654794
Lesenswert?

so etwa:
1
#!/bin/sh
2

3
zeilennummer=1
4
rm -f tmp.txt
5

6
while read zeile
7
do
8

9
    if [ $zeilennummer -eq 1 -o $zeilennummer -eq 4 ]
10
    then
11
        echo 1 >> tmp.txt
12
    else
13
        echo $zeile >> tmp.txt
14
    fi
15
    zeilennummer=`expr $zeilennummer + 1`
16

17
done <test.txt
18

19
mv -f tmp.txt test.txt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren