shell script Problem mit Variablen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
EA80
Beiträge: 35
Registriert: 01.09.2002 11:57:53
Wohnort: Cologne
Kontaktdaten:

shell script Problem mit Variablen

Beitrag von EA80 » 07.07.2004 23:05:45

Hallo Leute,
ich verzweifle an einem Problem. Ich habe das folgende Programm geschrieben. Ich wollte die Parameter die Ich dem Programm übergebe nicht wie mit echo $1 & echo $2 ausgeben, sondern eine Schleife drum basteln. Leider schaffe ich es nicht den Inhalt von $count wieder in ein $
zu packen. Vielleicht weiss jemand wie das geht.
Gruß EA80

#Programmaufruf mit Programmname parameter1 parameter2

#!/bin/bash
echo $1
echo $2
count=0
while [ $count -le 2 ]
do
echo $[$count] #so etwa, hier soll der Inhalt von $1 und $2 ausgegeben werden!
count=$[$count +1]
done

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 08.07.2004 02:33:16

Erstmal: count kannst du meines Wissens nicht mittels [ erhöhen, da [ nur eine Kurzschreibweise für test ist. Dafür musst du entweder expr oder (( nehmen:

Code: Alles auswählen

count=`expr $count + 1` #oder
(( count=$count + 1))
Das Problem lässt sich mit eval lösen:

Code: Alles auswählen

#!/bin/bash
echo $1
echo $2
for (( count=1 ; $count<2 ; count=$count+1 )); do
  eval echo \$$count 
done
Statt echo gehtz natürlich auch ein andere Befehl, beachte den 1. Backslash; dieser verhindert, dass die Bash $$ ersetzt. Nützlich ist auch "help for" und "help expr"

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 08.07.2004 08:07:56

So funktioniert es auch mit variabler Parameteranzahl:

Code: Alles auswählen

while [ "$1" != "" ]
do
  echo $1
  shift
done
Gruß
ernohl

EA80
Beiträge: 35
Registriert: 01.09.2002 11:57:53
Wohnort: Cologne
Kontaktdaten:

Beitrag von EA80 » 08.07.2004 08:21:35

Hallo Joghurt und ernohl
vielen Dank für die schnelle Hilfe. Die Vorschläge klappen supi.

#!/bin/bash
echo $1
echo $2
for (( count=1 ; $count<3 ; count=$count+1 )); do
eval echo \$$count
done

Auf das evalbin ich nicht gekommen :-(

Gruß EA80

Antworten