Brauche Hilfe beim Scripten :(

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
MarcMarin
Beiträge: 272
Registriert: 13.04.2004 08:53:14
Wohnort: Köln

Brauche Hilfe beim Scripten :(

Beitrag von MarcMarin » 23.03.2011 23:03:48

Hallo zusammen,

bin gerade dabei ein Script zu schreiben und hänge etwas fest....

Ich möchte gerne eine Ausgabe in der in 2 Zeilen ein Addressbereich steht in 2 Variablen umleiten.
Doch es funktioniert einfach nicht..... Hier der Auszug aus meinem Script:

Code: Alles auswählen

for i in `seq 1 $numofmem `
do
starting_address$i=$(/usr/sbin/dmidecode -t 20 |grep "Starting Address"|cut -d " " -f 3)
done
eigentlich sollte jetzt in "starting_adress" durch das $i hochgezählt werden....und je eine Zeile der ausgabe von /usr/sbin...... in die Variablen geschrieben werden...

Kann mir einer von euch weiterhelfen wie ich das Problem lösen kann?

Lieben Gruß
MarcMarin

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Brauche Hilfe beim Scripten :(

Beitrag von newdeb » 24.03.2011 03:33:53

"eval" ist dein Freund:

Code: Alles auswählen

for i in 1 2; do
  wert=$((1000+i))
  eval var$i=$wert
done
echo $var1 $var2
Alternative wäre ein Array:

Code: Alles auswählen

for i in 1 2; do
  wert=$((1000+i))
  arr[$i]=$wert
done
echo ${arr[1]} ${arr[2]}

Benutzeravatar
MarcMarin
Beiträge: 272
Registriert: 13.04.2004 08:53:14
Wohnort: Köln

Re: Brauche Hilfe beim Scripten :(

Beitrag von MarcMarin » 24.03.2011 22:27:12

Dankeeee für die "eval" Syntax :-) Die hat mir sehr geholfen.

Jetzt habe ich noch eine Frage ...

Wie kann ich abfragen ob eine Zahl (in meinem Fall eine HEX Zahl) zwischen zwei anderen liegt?

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Brauche Hilfe beim Scripten :(

Beitrag von bmario » 24.03.2011 22:49:30

mit test? bzw.

Code: Alles auswählen

if [ ( $lower -lt $zahl ) -a ( $zahl -lt $upper ) ]; then
# do stuff
fi
*edit: es muss natürlich -lt statt -gt hin!
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Brauche Hilfe beim Scripten :(

Beitrag von newdeb » 25.03.2011 09:07:49

test versteht die Hex-Notation nicht:

Code: Alles auswählen

[ 0xf -lt 16 ]
bash: [: 0xf: integer expression expected
Die Bash evaluiert in den Doppelklammern (( )) arithmetische Ausdrücke auch mit Werten verschiedener Zahlenbasen:

Code: Alles auswählen

lower=036     # oktal
value=0x20    # hex
upper=34      # dezimal
((lower<value && value<upper)) && echo TRUE

Benutzeravatar
MarcMarin
Beiträge: 272
Registriert: 13.04.2004 08:53:14
Wohnort: Köln

Re: Brauche Hilfe beim Scripten :(

Beitrag von MarcMarin » 28.03.2011 16:20:41

Danke für die vielen Infos :-)

leider schon das nächste Problem...

Ich komme bei folgender Zeile nicht weiter... :

Code: Alles auswählen

if [ $staddr$i -lt $mcefailure]  && [ $mcefailure -lt $endaddr$i ]
Da ich zwei Variablen miteinander verbunden habe, brauche ich eigentlich wieder ein "eval" ?!... weiß jedoch nicht wie ich das in meiner Zeile unterbringen soll....

Im moment wird nur der Inhalt von $i und nicht von bsp. $staddr$i ausgegeben.

Hat jemand eine Idee?

Lieben Gruß
MarcMarin

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Brauche Hilfe beim Scripten :(

Beitrag von newdeb » 28.03.2011 19:56:21

Wenn im weiteren Skriptverlauf häufig diese pseudo-indizierten Variablen benutzt werden, würde ich eher zur Verwendung von Arrayvariablen raten. Damit sind z.B. Schleifen einfacher zu handhaben und das Ganze ist lesbarer.
Alternativ könnte man noch mit Indirektion arbeiten:

Code: Alles auswählen

var1=foo
i=1
varname=var$i
echo ${!varname}

Es wird hierbei nicht der Inhalt von varname ausgegeben, sondern der Inhalt der Variablen, deren Name in varname steht.
(Man muss bisschen um die Ecke denken :wink: )

Benutzeravatar
heinz
Beiträge: 535
Registriert: 20.12.2007 01:43:49

Re: Brauche Hilfe beim Scripten :(

Beitrag von heinz » 28.03.2011 19:58:41

Hallo MarcMarin,

villeicht suchst Du ja eher sowas...

Code: Alles auswählen

#Variable setzen:
staddr[$i]=irgendwas

#Variable abfragen:
echo ${staddr[$i]}
gruß heinz

Antworten