Das OS X des Mac basiert auf UNIX. Der Anwender hat über das Dienstprogramm Terminal vollen Zugriff auf sämtliche Tools wie awk, sed, grep, test, sort u.s.w.
Über ein geeignetes Plugin lässt sich diese Möglichkeit auch innerhalb von FileMaker nutzbar machen. Eine Eigene Funktion stellt ein User-Interface für mehrere Plugins bereit.
Die Schnittstelle wird im Vortrag vorgestellt und erläutert. Sie bietet die Möglichkeit, Shell-Skripts mit mehreren Parametern und Eingabedaten zu versorgen. Es wird gezeigt, wie man eine Bibliothek von Shell-Skripts in ein FileMaker-Projekt integrieren, die Skripts mit verschiedenen Testdaten testen und später für den produktiven Betrieb nutzen kann.
Viele Probleme lassen sich auf diese Weise einfacher lösen als mit den von FileMaker bereitgestellten Funktionen. Das liegt daran, dass es viele UNIX-Tools gibt, die auf das Scannen von Eingabedaten mit Hilfe regulärer Ausdrücke spezialisiert sind.
Im produktiven Betrieb kann das getestete Skript mit SQL aus der Skriptbibliothek gelesen und mit der Funktion SHEXEC ausgeführt werden.
Erich Schmidt hat über 30 Jahre Erfahrung im Umgang mit UNIX-Shells. Er wird Anwendungsbeispiele für awk, sed, sort und evtl. weitere Tools geben. Der Schwerpunkt liegt dabei auf der Anwendung von awk mit seinen Builtin-Funktionen (match, split, index, sub, sprintf, ...)
Im Anschluss an den Vortrag gibt es die Möglichkeit Fragen zu stellen und zu diskutieren.
FMK2019 Softwaretest in Filemaker Programmen by Volker Krambrich
FMK2019 Nutzung von Shell-Skripts in FileMaker by Erich Schmidt
1. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
www.filemaker-konferenz.com
Erweiterung des Leistungsumfangs von FileMaker durch Zugriff auf die
UNIX-Tools des macOS
Dipl.-Math. Erich Schmidt
Nutzung von SHELL-Skripts in FileMaker
2. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Über den Sprecher
• 1974 Abschluss als Dipl.-Mathematiker
(Universität Rostock)
• ab 1978 Softwareentwicklung Mainframe (IBM 360)
• Mitte der 80-er UNIX und C
• Datenbankentwicklung seit 1990 (IBM AS/400)
• ab 2005 freiberuflicher Softwareentwickler
• ab 2013 mache ich nur noch, was richtig Spass macht
FileMaker gehört manchmal auch dazu
Erich Schmidt
3. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Zum Thema
• Motivation
• Was macht die Shell im UNIX?
• Stand-alone-Test von Skripts am Terminal
• Entwurf eines User-Interfaces für FileMaker
• Mögliche Plugins zur Unterstützung in FileMaker
• Implementierung einer Skriptbibliothek in FileMaker
• Einige Beispiele
4. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Motivation
• Die Verarbeitungslogik lässt sich in Form von Daten in einem Textfeld speichern.
• Damit ist für ein neues Problem keine neue Funktion erforderlich, sondern nur ein
neuer Datensatz.
• Das System enthält eine umfangreiche Sammlung von Tools für die Analyse und
Manipulation von Daten.
• Viele der Tools arbeiten mit regulären Ausdrücken.
• Es können eigene (z.B. in C oder C++) geschriebene Tools hinzugefügt werden.
• Skripts lassen sich unabhängig von FileMaker erstellen und testen.
5. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Die Shell
• Die Shell ist ein zeilenorientiertes USER-Interface am Terminal.
• Sie ist ein normales Tool, das Zeilen liest und damit "etwas" macht.
• Wenn die gelesenen Zeilen von einem File kommen, nennt man das File ein
Shell-Skript.
• Es gibt mehrere Shells im System.
• Für jeden Nutzer gibt es eine Standard-Shell (bei mir: /bin/bash).
• Der Leistungsumfang ist immens.
• Es gibt aber einige Grundlagen mit denen
wir uns gleich beschäftigen, weil sie zum
Verständnis der Beispiele erforderlich sind.
ca. 900 Seiten
6. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Die Bourne-again Shell (bash)
• Die von der Shell gelesenen Zeilen werden ggf. aufbereitet und interpretativ
abgearbeitet.
Beispiel:
• Es können aber auch mehrere Kommandos in einer Zeile stehen. Die müssen
dann durch ein Kommandotrennzeichen getrennt werden.
• Ein Kommandotrennzeichen ist das Semikolon. Es bewirkt, dass alle in der
Zeile stehenden Kommandos hintereinander ausgeführt werden.
Beispiel:
• Ein weiteres ist der senkrechte Strich | (Pipe). Er bewirkt, dass die Ausgabe des
links stehenden als Eingabe des rechts stehenden Kommandos verwendet
wird (auch mehrfach hintereinander).
Beispiel:
• Es gibt noch weitere Kommandotrennzeichen
ls -lsa
cd /tmp;ls -ls
ls | sort -r
7. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Shell-Parametersubstitution
• Die Paramtersubstitution ist eine von vielen Aufbereitiungsleistungen der Shell.
• Stellungsparameter werden durch Angabe beim Aufruf eines Skripts oder Kommandos
definiert
MyScript -h 43 txt
• Schlüsselwortparameter durch ein Schlüsselwort gefolgt von = und einem Wert
KUNDE=7081
• Es gibt built-in-Parameter (PATH, PWD, LOGNAME, HOME, #, ?, PS1, PS2,…),
von denen einige read-only sind.
• Die Shell scannt jede gelesene Zeile auf bestimmte Zeichen(folgen). (Metazeichen)
• Das Metazeichen $ gefolgt von einer Nummer leitet eine Parametersubstitution ein
$1 ersetzt die Shell durch den ersten, $2 durch den zweiten Stellungsparameter u.s.w.
• Das Metazeichen $ gefolgt von einem Schlüsselwort wird durch den Wert des entsprechenden
Schlüsselwortparameter ersetzt, zum Beispiel:
$HOME --> /Users/fmk (die Tilde ~ ist ein Synonym für $HOME)
$KUNDE --> 7081
8. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Stand-alone-Test von Skripts am Terminal
• Ein spezielles Verzeichnis für Shell-Skripts anlegen (Im Finder oder im Terminal)
cd;mkdir bin
• In der .profile im HOME-Verzeichnis den PATH-Parameter ändern, so dass der
PATH das Skriptverzeichnis enthält.
PATH=~/bin:$PATH
• Die hidden files werden im Finder mit der Tastenkombination SHIFT-CMD-.
sichtbar. Im Terminal mit ls -lsa
• Mit einem beliebigen Text-Editor ein Skript-File erstellen.
• Das Skript mit chmod u+x MySkript ausführbar setzen.
• Skript unter seinem Filenamen im Terminal aufrufen und ggf. Parameter angeben.
MySkript parm1 parm2
9. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Das Tool awk
• awk ist nur eines (wenn auch ein sehr mächtiges) von vielen Werkzeugen
• Es ist speziell für die Analyse und Manipulation von Textdaten konzipiert
• Die Verarbeitung geschieht so, dass eine oder mehrere Dateien zeilenweise
gelesen und nach Regeln die der Aufrufer festlegt verarbeitet werden
• Die Regeln enthält das awk-Programm
• Aufrufvarianten:
awk 'awk-programm'
awk -v V1=wert1 -v V2=Wert2 ... 'awk-programm'
Beispiel:
awk -v N=$1 -v M=$2 'awk-programm'
10. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Regeln bei Ausführung eines awk-Programms
• Ein awk-Programm liest alle Eingabezeilen (Daten).
• Für jede Zeile wird das gesamte awk-Programm ausgeführt
• Eine Programmzeile hat die Form: bedingung { aktion }
• Wenn die gelesene Zeile die Bedingung erfüllt, wird die Aktion ausgeführt, sonst
nicht. Eine Bedingung die fehlt, ist immer erfüllt.
• Jede Eingabezeile wird automatisch in Felder aufgeteilt. Zwischen den Feldern steht
das Feldtrennzeichen. Das wird in der Builtin-Variablen FS definiert. (FS=" ")
• Beim Lesen einer Datenzeile werden die Builtin-Variablen NR (Number of Record)
und NF (Number of Fields) neu gesetzt.
• Die Aktionen, die unter den Bedingungen BEGIN bzw. END codiert sind werden vor
dem Lesen der ersten bzw. nach dem Lesen der letzten Zeile ausgeführt.
11. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Entwurf einer Schnittstelle für
FileMaker
• Für die Skriptausführung wird benötigt:
Skripttext
Daten (optional)
Parameter (optional, werden als Liste übergeben)
• Dafür gibt es für jedes unterstützte Plugin eine CF mit diesen 3 Parametern
• Die CFs stellen ein ablauffähiges Skript zusammen und rufen jeweils die
entsprechende Plugin-Funktion auf.
Die Daten werden als Here Document in das Skript integriert und dem
ersten Kommando zugeordnet.
• Die Plugin-Funktionen sind für
BaseElements: BE_ExecuteSystemCommand
bBox: bBox_Shell
MBS: AppleScript.Run (do shell script)
12. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Entwurf einer Schnittstelle für
FileMaker
• Für den Anwender wird das noch einmal gekapselt, damit unabhängig vom
verfügbaren Plugin immer der gleiche Aufruf erfolgen kann.
• Wrapper: SHELL(cmd;stdin;parm)
• Im Startskript wird das Betriebssystem geprüft (Mac OS) und ob
mindestens eines der Plugins installiert ist.
• Setzen und Abfragen von Flags siehe auch:
FMM2017-01 S38 ff. und FMM2017-02 S. 22 ff.
13. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Ausführung in FileMaker
14. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Einige Builtin-Funktionen in awk
length[(x)] length($6)
int(x) int($2/10)
substr(s,m,n) substr(s,3,$1)
index(s,t) index("172-518","-")
match(s,r) match($2,"[X-Z][0-9]+")
Setzt die Builtin-Variablen RSTART und RLENGTH
split(s,a,r) split("JAN,FEB,MRZ",m,",")
Belegt ein Array a mit den Komponenten von s
15. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Einige Builtin-Funktionen in awk
sub(r,t[,s]) sub(" +"," ",$1)
global mit gsub(r,t[,s])
printf(fmt,expr,…) formatierte Ausgabe
Beispiele
printf("%5dn",zahl) 5 Stellen rechtsbündig
printf("%07dn",zahl) 7 St. mit führenden Nullen
printf("%s : %9.2f ","Summe",s) mit 2 Kommastellen
printf(" %*d",l,zahl) Ausgabelänge steht in l
16. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Einige Unterschiede zwischen C u. awk
Die Syntax der awk-Skriptsprache ist C-like.
Es gibt aber Unterschiede zu C.
In awk gibt es keine Pointer, folglich auch keine Pointerarithmetik.
Stringvariablen lassen sich mit -konstanten vergleichen
z.B.: $1 == "PLZ"
Den Kommaoperator aus C gibt es nicht in awk.
In awk muss die letzte Anweisung einer Zeile nicht mit Semikolon enden.
Variablen müssen nicht definiert werden. Typ ergibt sich aus Kontext und
kann sich kontextabhängig ändern.
awk unterstützt assoziative Arrays
awk unterstützt keine mehrdimensionalen Arrays
17. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Spezielle Ausdrücke und Operatoren in awk
x = a+2*p; x == a+2*p
x != 3
Inkrement/Dekrement Bedeutung
x = ++n; n=n+1;x=n;
Wertzuweisung Vergleich
x = n++; x=n;n=n+1;
x = —-n; n=n-1;x=n;
x = n—-; x=n;n=n-1;
Zusammengesetzte Wertzuweisung Bedeutung
s += k; s = s + k;
s *= 2; s = s * 2;
18. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Spezielle Steuerungselemente awk
awk kennt alle Sprachemente zur Programmsteuerung aus C
Zusätzlich:
for( var in array) # for-Schleife für assoziative arrays
Beispiel: for( m in monat) print m,monat[m];
next; # übergeht die restlichen Aktionen des awk-Programms
(liest die nächste Zeile)
nextfile; # beendet die Verarbeitung der aktuellen Eingabedatei
19. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Literatur
• Helmut Herold:
UNIX Grundlagen
Kommandos und Konzepte
ADDISON-WESLEY 1991 ISBN 3-89319-306-5
• Helmut Herold:
UNIX-Shells
Bourne-Shell, Korn-Shell, C-Shell
ADDISON-WESLEY 1992 ISBN 3-89319-381-2
• Helmut Herold:
AWK und SED
ADDISON-WESLEY 1991 ISBN 3-89319-344-8
• Kai Surendorf:
Mac OS X Snow Leopard und UNIX
Galileo Press 2010 ISBN 978-3-8362-1476-6
• Erich Schmidt
Listen listig verarbeiten
FMM2016-03 S. 31ff. K&K Verlag Hamburg
• Erich Schmidt
Outsourcing von Verarbeitungsschleifen
FMM2017-06 S. 10ff. K&K Verlag Hamburg
20. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Nutzung von SHELL-Skripts in FileMaker - Dipl-Math. Erich Schmidt
Fragen und Antworten
Der Idealfall: Sie fragen, ich antworte.
21. 10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Vortrag und Sprecher
Vielen Dank unseren Sponsoren
Danke für das Bewerten dieses Vortrages