Newbe Frage: Wie erstelle ich ein Script?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Maui Muc
Beiträge: 71
Registriert: 17.09.2004 11:10:55

Newbe Frage: Wie erstelle ich ein Script?

Beitrag von Maui Muc » 30.08.2005 11:51:59

Hallo,

ich möchte mir ein einfaches Script erstellen, habe aber keine Ahnung wie ich überhaupt ran gehen soll. Hoffentlich ist das der richtige Bereich des Forums um solche Fragen los zu werden.
Ich vermute mal dass sich das Problem sehr leicht auf bash Ebene lösen lässt. Aber da ich noch nie etwas mit Scripten zu tun hatte, kenne ich weder einen Befehl noch ein Quelle um mich zu informieren.

Zur Problemstellung:
Ich habe hier rund 250 text-Header Files, die bearbeitet werden wollen und unter einem anderen Namen abgespeichert.
Was das Script machen soll:
- text-Header File öffnen
- etliche Veränderungen; hier brauche ich ein paar IF´s, WHILE Schleifen, SWITCH wäre ebenfalls nicht zu verachten und zu guter letzt wäre eine ROUND Fkt auch ganz gut
- und nun das Bearbeitet File unter einem anderen Namen wieder ablegen

Das ganze nun noch in eine Schleife und ca. 250x laufen lassen.

Womit macht man das bzw. welche Befehle brauche ich und wo finde ich deren Syntax.

Besten Dank schon im Voraus

Gruß

Stefan

Benutzeravatar
Silke
Beiträge: 559
Registriert: 17.05.2005 15:58:20
Wohnort: Hannover
Kontaktdaten:

Beitrag von Silke » 30.08.2005 11:56:03

Moin Stefan,

ich finde den Advanced Bash-Scripting Guide immer sehr hilfreich. Ist aber auf
englisch, und ich weiss nicht, wie nuetzlich er ist, wenn man ueberhaupt noch
nie was damit gemacht hat:

Code: Alles auswählen

http://www.tldp.org/LDP/abs/html/
Gruss,
- Silke -
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist schon schwieriger.
- Kurt Tucholsky -

Benutzeravatar
eagle
Beiträge: 2282
Registriert: 05.11.2002 11:20:53
Wohnort: Berlin

Beitrag von eagle » 30.08.2005 11:57:59

Eine Variante wäre die Shell selbst zu benutzen. Wie man die bash programmiert erfährst du hier [1]. Möglicherweise eignen sie für deinen Einsatzfall eher Programmiersprachen wie Perl oder Python.

eagle

[1] http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
"I love deadlines. I love the whooshing sound they make as they fly by." -- Douglas Adams

Benutzeravatar
TCA
Beiträge: 1465
Registriert: 14.05.2004 23:42:30
Wohnort: Göttingen

Beitrag von TCA » 30.08.2005 12:07:25

Für den Anfang kannst du dir das auch mal ansehen.

http://www.selflinux.org/selflinux/html ... erung.html
Gruss
Marc

Wer glaubt, etwas zu sein,
hat aufgehört, etwas zu werden.

debianforum.de Verhaltensregeln

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

Beitrag von Joghurt » 30.08.2005 14:08:28

Also dein Problem schreit geradezu nach Perl oder Python

Maui Muc
Beiträge: 71
Registriert: 17.09.2004 11:10:55

Beitrag von Maui Muc » 30.08.2005 18:33:15

Hallo,

danke für die Links, ich habe mich schon etwas eingelesen und habe festgestellt, dass die bash ein sehr mächtiges Werkzeug ist. Das reicht für meine Zwecke völlig. Dankeschön.

Mit einer Sache komme ich aber überhaupt nicht klar. Folgender Inhalt liegt in einer Datei:

Code: Alles auswählen

OziExplorer Map Data File Version 2.2
Gb004.jpg
..\Maps\GBAtlas\GB004.jpg
1 ,Map Code,
Ord Srvy Grt Britn,,   0.0000,   0.0000,WGS 84
Reserved 1
Reserved 2
Magnetic Variation,,,E
Map Projection,(BNG) British National Grid,PolyCal,No,AutoCalOnly,No,BSBUseWPX,No
Point01,xy,  318,  277,in, deg,    ,        ,N,    ,        ,W, grid, SW,      60000,      90000,N
Point02,xy,  318, 3233,in, deg,    ,        ,N,    ,        ,W, grid, SW,      60000,      40000,N
Point03,xy, 2104, 3233,in, deg,    ,        ,N,    ,        ,W, grid, SW,      90000,      40000,N
Point04,xy, 2102,  276,in, deg,    ,        ,N,    ,        ,W, grid, SW,      90000,      90000,N
Point05,xy,     ,     ,in, deg,    ,        ,N,    ,       ,W, grid,   ,           ,           ,N
Point06,xy,     ,     ,in, deg,    ,        ,N,    ,       ,W, grid,   ,           ,           ,N
Nun möchte ich die Zeilen, beginnend mit PointXX, wenn sie Gefüllt sind, an ein Array übergen. Das Komma als Trenner. Wie kann ich das machen?

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

Beitrag von Joghurt » 30.08.2005 19:28:28

Mit bash wird das mühsam (musst noch z.B. awk verwenden), ich hab deshalb mal ein kleine Pythonskript geschrieben:

Code: Alles auswählen

#!/usr/bin/python
datei = open("Meine Datei.txt")
for line in datei:
    if line.startswith("Point"):
       data = [x.strip() for x in line.split(",")]
       if data[3] == "":
         # leere Zeile
         continue
       # hier mit data arbeiten
       print data
(Beachte, dass Einrückung bei Python wichtig ist)

Maui Muc
Beiträge: 71
Registriert: 17.09.2004 11:10:55

Beitrag von Maui Muc » 31.08.2005 12:08:09

Hallo Joghurt,

vielen Dank für deine Mühen, Python scheint echt gut lesbar zu sein, ich verstehe sogar ganz gut was da steht. Sogar ohne die Sprache zu kennen. Werde ich mir bei Gelegenheit genauer ansehen. Gerade im Moment hat mit die bash voll in ihren Bann gezogen.

Ich habe selbst eine Lösung für mein Problem gefunden. Da alle Dateien gleich aufgebaut sind, ersetze ich einfach mit "tr" alle ',' durch ' '
und Frage die Punke mit einer einfache WHIL Schleife und

Code: Alles auswählen

array=($(grep point$whil_var -i $file | tr ',' ' '))
ab. Die Zahl der Wiederholungen ermittle ich mit der option -c von grep.

Besten Dank

Antworten