sh nach csh übersetzen.

A

antek72

Grünschnabel
Hallo,
bitte um Übersetzung der Variablenzuweisung von sh in csh.
Hier in sh:

Farbe=`echo $Color cut .....' >>>hier wird die Variable Farbe mit
z.B.
ABC gefüllt.

ABC=123
CDE=456
...
x[123]=blau
x[456]=rot
...

echo "Farbe:" ${x[$Farbe]}

Ergebnis sollte sein:
Wenn $Color ABC ist, dann sollte Farbe den Wert blau zugewiesen
bekommen.

Das o.g. Skript funktioniert prima in sh.

Wie muss es in csh aussehen?

Herzlichen Dank im voraus.
Toni
 
Hallo

bash:
Code:
#!/bin/bash
ABC=1
CDE=2
Farbe=$ABC
x[1]=rot
x[2]=blau
echo "Farbe:" ${x[$Farbe]}
csh:
Code:
#!/bin/csh
set ABC = 1
set CDE = 2
set FARBE = $ABC
set x = (rot blau)
echo "Farbe:" $x[$FARBE]
Arrays unter 'csh' sind so eine Sache... Aber ich denke das hättest du mit 'google' innerhalb kurzer Zeit selber herausgefunden...

Gruss
d22

P.S: Wenns nicht unbedingt sein muss würde ich keine csh-Scripts schreiben.
 
Hallo,
herzlichen Dank für deine Antwort.
Rot wird ausgewertet. Alles i.O.
Aber wie sieht es nun mit blau aus, wenn CDE übergeben wird?

Und dann hätt ich noch ganz viele Farben....
Danke & Gruß
Toni
 
Versteh ich nicht. ?????

Die Farbe wird hier definiert und ist immer dynamisch:
Farbe=`echo $Color cut .....' Ergebnis ist dann ABC oder DEF oder...

Woher weiss dein Skript, daß jetzt DEF ausgewertet wird?
 
Also, ich versteh nicht ganz was du machen willst. Was willst du von uns wissen, was ist deine Aufgabe?
 
#!/bin/sh
Farbe=

ABC=123
DEF=456
GAH=789

x[123]=blau
x[456]=rot
x[789]=gelb

echo "Farbe lautet:" ${x[$Farbe]}

-------------------------------------------------------------
Dies ist ein lauffähiges Skript unter sh,
wenn z.B. Farbe=ABC in der 2ten Zeile gesetzt wird.
Die Ausgabe bei echo sollte dann lauten: blau.

Wird Farbe=DEF eingesetzt, kommt rot bei echo.

Wir Farbe=GAH eingesetzt kommt gelb bei echo.

Und nun meine Frage:

Wie muss das Skript in csh aussehen?

Es soll nur die Variable Farbe in der 2ten Zeile geändert werden.
Hintegrund: Die Variable Farbe wird bei jedem Skriptaufruf dynamisch eingetragen. Somit steht da entweder:
Farbe=ABC oder Farbe=DEF oder Farbe=GAH
Ergebnis im echo: Entweder blau oder rot oder gelb

Merci
Toni
 
Hallo

Warum schaust du nicht einfach in der Manpage zur csh nach?
In diesem Fall dürfte der einfache Unterschied nur in der Verwendung von
set varname=value gegenüber varname=value in der Bash liegen.
Beim Arrayzugriff entspricht $VAR[INDEX] der Schellsyntax ${VAR[INDEX]}.


Wo ist das Problem?

Gruß Wolfgang
 
Schau, ich habe dir die ganze Aufgabe sozusagen vorgekaut. Alles was du brauchst steht hier drinn:
csh:
Code:
#!/bin/csh
set ABC = 1
set CDE = 2
set FARBE = $ABC
set x = (rot blau)
echo "Farbe:" $x[$FARBE]
Grüsse
d22
 
Ich bin kein Programmierer und kann das leider nicht transferieren.
So geht's leider nicht:

#!/bin/csh
set Farbe=

set ABC=123
set DEF=456
set GAH=789

set x[123]=blau
set x[456]=rot
set x[789]=gelb

echo "Farbe lautet:" $x[$Farbe]
 
Zuletzt bearbeitet:
Hallo
Das geht nicht, weil du Farbe nicht mit set gesetzt hast.

Wenn du das nicht selber kannst, hast du nur zwei( eigentlich drei) Möglichkeiten.
Entweder du lernst es, oder du lässt es von Jemanden erledigen, der das kann.

Die dritte: Du lässt es ganz sein. ;)

Gruß Wolfgang
 
Hallo,
auch mit set vor Farbe geht es nicht.
Ich werde es morgen nochmals angehen.
Über Nacht leg ich mir die csh-manpages unters Kissen.
Gruß
Toni
 
Das Problem ist vorallem das Array. Du kannst mit der 'csh' nicht beliebig Arrays füllen. Wenn du wirklich 'x[789]' willst, muss dein Array auch 798 gross sein.
Code:
#!/bin/csh
set ABC=1
set DEF=2
set GAH=3

set Farbe=$DEF

set x=(blau rot gelb)

echo "Farbe lautet:" $x[$Farbe]
Das klappt so, aber sag mal, was wird das eigentlich? Ist reine Neugierde, scheint mir sehr kompliziert zu sein...

Warum willst du denn unbedingt 'csh'? 'csh' ist nun wirklich nicht optimal für solche Dinge.

Gruss
d22
 
MoinMoin,
Ich werde nicht verstanden ?(

Folgendes Skript ergibt das Ergebnis blau:

#!/bin/sh
Farbe=ABC
ABC=1
DEF=2
GAH=3
x[1]=blau
x[2]=rot
x[3]=gelb
echo "${x[$Farbe]}"

Folgendes Skript ergibt das Ergebnis rot:
#!/bin/sh
Farbe=DEF
ABC=1
DEF=2
GAH=3
x[1]=blau
x[2]=rot
x[3]=gelb
echo "${x[$Farbe]}"

und folgendes ergibt gelb:

#!/bin/sh
Farbe=GAH
ABC=1
DEF=2
GAH=3
x[1]=blau
x[2]=rot
x[3]=gelb
echo "${x[$Farbe]}"


Ich weiss nicht, wie ich es besser erklären soll.
Ich ändere nur die drei Buchstaben in der zweiten Zeile und das Ergebnis ändert sich. Wo muss ich in deinem Vorschlag die drei Buchstaben ändern, damit echo die zugeordnete Farbe ausgibt?:think:

In sh funktioniert es prima !
 
Hallo
Habe jetzt noch mal nach einer Manpage für csh geschaut, (csh ist bei mir nicht installiert).
Die Lösung hat dizzgo schon geschrieben.
Da wird offensichtlich eine Hashtable für die Bash simuliert, da es dort soetwas nicht gibt.

Nach dem set ARRAYNAME=(element1 element2 element3) steht die Arraygröße fest. (Hier 3)
Es gibt dort wie in c keine dynamischen Arrays.

Gruß Wolfgang
 
Code:
#!/bin/csh
set ABC=1
set DEF=2
set GAH=3
set Farbe=$ABC
set x=(blau rot gelb)
echo "Farbe lautet:" $x[$Farbe]

#!/bin/csh
set ABC=1
set DEF=2
set GAH=3
set Farbe=$DEF
set x=(blau rot gelb)
echo "Farbe lautet:" $x[$Farbe]

#!/bin/csh
set ABC=1
set DEF=2
set GAH=3
set Farbe=$GAH
set x=(blau rot gelb)
echo "Farbe lautet:" $x[$Farbe]

So, jetzt hab ich dir aber jedes bisschen vorgekaut. Ein bisschen Eigennitiative sollte schon drin liegegen:
Wo muss ich in deinem Vorschlag die drei Buchstaben ändern, damit echo die zugeordnete Farbe ausgibt?
Du hättest es wenigstens probieren können! Ich habe nicht das gefühl, dass du begreifst was das Scriptchen effektiv macht, und was ich daran ärgerlich finde ist, dass es mir scheint, dass du auch kein Intresse hast es zu verstehen.

Wolfgang hat das eingentlich ziemlich gut geschrieben:
Wenn du das nicht selber kannst, hast du nur zwei( eigentlich drei) Möglichkeiten.
Entweder du lernst es, oder du lässt es von Jemanden erledigen, der das kann.

Die dritte: Du lässt es ganz sein.

Und ausserdem frage ich mich immernoch:
(...) aber sag mal, was wird das eigentlich? Ist reine Neugierde, scheint mir sehr kompliziert zu sein...
Warum willst du denn unbedingt 'csh'?

Grüsse
d22
 
Danke Wolfgang, so ist es....
Die Lösung sieht dann so aus:

set Farbe= hier kommt ABC oder DEF oder.....rein

if ($Farbe == "ABC") then
set Farbe = "blau"
endif

if ($Farbe == "DEF") then
set Farbe = "rot"
endif

if ($Farbe == "GAH") then
set Farbe = "gelb"
endif

echo $Farbe


Di sh-Version ist schon schicker, aber es funtzt.
-----------------------------------------------------------------
Herzlichen Dank an alle (auch an jfb!)

Gruß
Toni
 
Zurück
Oben