PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ksh programmierung


alphazerp
22.09.2006, 10:59
Hallo Leute,

ich bin in der Ausbildung und soll mich damit im moment beschäftigen nur ich komm nicht richtig mit klar.

z.b. kenn ich verschachtelungen aus C++, nur in der Korn Shell komm ich damit nicht klar beim schreiben des Scripts.

z.b.:
para=2

set -A parawert \$$para
inhalt=`grep ${parawert[0]} $1`

hier oben leg ich mir ein Array an, hol mir aus meiner variablen para (counter) den aktuellen Wert raus. im momemt 2! Setze vor die 2 mit \$ das
$ Zeichen. dann hol ich mir aus meinem Array $2 wieder heraus mit -> ${parawert[0]}. Das mache ich deshalb weil $2 mir eigentlich
auslesen soll wie der Name des 2ten übergeben Parameter beim Scriptaufruf war. Dann soll er diesen Parameter in der datei $1 suchen

nur das funktioniert nicht. ich glaube der sucht in der datei $1 nach $2 und nicht nach dem übergebenen Parameter der sich
hinter $2 verbrigt z.b. ein String wie "ORA"

ich habe es auch mit verschachtelungen like --> inhalt=`grep `...` $1` <--- probiert, nur irgendwo habsch im internet gelesen das dies nicht geht.
Dort wurden andere Möglichkeiten mit () gezeigt. nur habe ich das nicht hinbekommen, also entweder binsch in Shell ein DAU oder irgendwas stimmt hier nicht.
Ich arbeite an einer AIX 4.3 Maschine über ein Windows Terminal. Eingewählt habsch mich mit "PuTTY"
Default Shell ist ksh und wird sepperat im script nochmal angegeben mit

#! /usr/bin/ksh

Seht ihr Fehler ? Inkompatibilitäten ?

p.s.: ich habe probleme mit der Syntax. Ich lerne aus einem Buch das z.b. dies unter Brace Extensions aufführt:

echo Austr{ia,alien,alia} <----- soll dann 3 ausgaben bringen

Austria Australien Australia <------ das kommt bei mir aber nicht. bei einem Kollegen unter der Bash Shell auf einer Linux Maschine gehts.

Das Buch sagt aber es soll für Bash und Korn Shell gehen. Jetzt frag ich mich wo liegt der Fehler. Großartig kann man ja nichts falsch machen.
Das Buch ist extra für Bash und Korn Shell und beschreibt eigentlich jeden Punkt wo unterschiede zwischen den Shells sind. Naja
ich finde irgendwie die Syntax in C++ einfacher bzw. orientiere mich vielleicht zu sehr an C++.

Könnt ihr mir Tipps geben ?


Mr.Homm
27.09.2006, 13:03
Ich habe leider keine ksh zu Hand und weiß auch nicht, ob ich dein Problem richtig verstanden habe. Ich glaube, dass es darum geht, die Ausgabe des grep-Befehls in eine Variable umzuleiten und als Parameter für grep eine Element aus einem Feld zu nehmen. Mit bash geht folgendes:

#!/bin/bash
parawert[1]="FOO"
parawert[2]="BAR"
parawert[3]="BAZ"
para=2
inhalt=$(grep "${parawert[$para]}" $1)
echo $inhalt

Wenn ich diese Batchdatei ausführe, wird in der Datei, deren Namen ich beim Aufruf als einzigen Parameter an die Batchdatei übergegeben habe, nach dem Wort BAR gesucht. Vielleicht klappt's ja so auch in der ksh?