Beispiele für neue Shell-Scripts
Description: FAQ
Categories: [FAQ] Tipps & Tricks
Link to this article: Select all
[url=https://amigafuture.de/app.php/kb/viewarticle?a=2595&sid=31418d5daf79dbe193bee5c60dc2afca]Artikeldatenbank - Beispiele für neue Shell-Scripts[/url]
Software-Information
Alle Amiga-Modelle 09.12.88
Beispiele für neue Shell-Scripts TG, S. 1
; Als Beispiel, wie man die Workbench 1.3 Shell und verschiedene
; Verbesserungen bei AmigaDOS-Befehlen für sinnvolle Shell-Scripts
; ausnutzen kann, möchten wir das Script RLIST vorstellen.
; RLIST arbeitet wie der AmigaDOS-Befehl LIST, gibt jedoch auch
; auch Unterverzeichnisse der Directory-Hierarchie aus.
.key
PAT,NOHEAD/S,QUICK/S,BLOCK/S,KEYS/S,DATES/S,NODATES/S,RX
; Deklaration der unterstützten Parameter: PAT..NODATES entsprechen
; dem normalen LIST-Befehl. RX dient als Zähler für die Rekur-
; sionsebene.
failat 21
if "" eq ""
echo >T:rlf
endif
; Wenn RX leer ist, also bei Aufruf durch den User, wird die Datei
; rlf im Directory T: erzeugt (leer). >T:rlf "" files
; Die Files (und nur die, nicht die Directories) des mit dem
; 1. Parameter (PAT) gewählten Verzeichnisses werden in die Datei
; rlf geschrieben (angefügt). Der Schalter "files" bewirkt,
; daß keine Directories bearbeitet werden.
; Die möglichen Schalter für RLIST werden dem LIST-Befehl übergeben.
; Beachten Sie, daß in Anführungszeichen steht, sodaß auch
; Namen, die ein Leerzeichen enthalten, richtig verarbeitet werden.
if not fail
; Der IF-Befehl testet, ob der vorhergehende LIST-Befehl überhaupt
; funktioniert hat. Existiert nämlich keine passende Datei oder
; Directory für das gegebene Muster , meldet LIST einen
; Fehler, und wir können uns jede weitere Arbeit sparen.
if "" eq ""
echo >>T:rlfT:rld "" dirs lformat="execute s:rlist *"%s%s*"
RX=I"
execute T:rld
delete T:rld
; Hier liegt nun der eigentliche Trick des Scripts: Mit Hilfe der
; LFORMAT-Option des LIST-Befehls wird in der Datei T:rld
; ein Script erzeugt, das mit dem darauf folgenden EXECUTE-Befehl
; abgearbeitet wird. Jede Zeile in diesem Script enthält für ein
; Directory des gerade bearbeiteten Directories die Anweisung
; "execute s:rlist "dirn" optionen I". Die LFORMAT-Option ersetzt
; das %s%s durch die vollständige Pfad-/Namen-Angabe für ein
; Directory. Beachten Sie, daß dadurch auch RLIST wieder aufgerufen
; wird. RLIST ruft also RLIST auf - das bezeichnet man als Rekursion -
; und in der nächsten Ebene werden die Subdirectories behandelt.
; Dies kann auch wiederholt auftreten. Damit die Dateien T:rld
; der einzelnen Ebenen nicht durch den rekursiven Aufruf tieferer
; Ebenen zerstört werden, muß der Parameter RX zur Unterscheidung
; herangezogen werden. Sein Wert ist in der ersten Subebene "I",
; in der zweiten "II", und so weiter. Nach Abarbeitung löscht
; jede Ebene das zu ihr gehörende Script T:rld.
; Wenn alle Ebenen abgearbeitet sind (RX ist leer), kann die
; mittlerweile aus den Inhalten aller Subdirectories zusammen-
; gefügte Datei T:rlf ausgegeben und anschließend gelöscht
; werden.
else
echo " not found"
endif
; Fall der erste LIST-Befehl eine Fehlermeldung verursachte,
; geben wir diese im ELSE-Zweig an den Anwender weiter - das
; wär's.
; Nach Entfernung aller Kommentarzeilen (Zeilen die mit ";"
; beginnen) werden Sie sehen, daß ein erstaunlich kompaktes, aber
; recht schwer durchschaubares Script übrigbleibt - das ist bei
; allen Rekursionen so: Eine gestellte Aufgabe läßt sich in
; wenig Programmzeilen erledigen - allerdings in einer der
; menschlichen Denkweise wenig angepaßten Form.
; RLIST sollte im Directory S: installiert werden und durch den
; Befehl "PROTECT S:RLIST +S" ausführbar gemacht werden, ohne
; den Befehl EXECUTE eingeben zu müssen. RLIST funktioniert nur
; mit installierter SHELL.
; Als weiteres Beispiel, wie man die Workbench 1.3 Shell und ver-
; schiedene Verbesserungen bei AmigaDOS-Befehlen für sinnvolle
; Shell-Scripts ausnutzen kann, möchten wir das Script RPAT
; vorstellen.
; RPAT hat, ähnlich wie die auf der WB 1.3 vorhandenen Scripts
; SPAT und DPAT, die Aufgabe, AmigaDOS-Befehlen rekursive
; Fähigkeiten zu verleihen, d.h. Anwendung eines Befehls auf alle
; oder einem Muster entsprechenden) Dateien in der Directory-
; Hierarchie.
.key COM/A,PAT,OPT,RX
failat 21
if "" eq ""
echo >T:trf>T:trf "" files lformat=" *"%s%s*" "
if not fail
;
; Die folgenden beiden Druckzeilen sind als eine einzige einzutippen!
list >T:trd "" dirs lformat="execute s:rpat *"*"
*"%s%s*" *"*" RX=I"
execute T:trd
delete T:trd
if "" eq ""
execute T:trf
delete T:trf
endif
else
echo " not found"
delete T:trf
endif
; Zum besseren Verständnis der hier angewendeten Rekursion
; studieren Sie bitte den obigen Text über RLIST.
; Anders ist hier, daß die erzeugte Datei T:trf nicht mit
; TYPE ausgegeben, sondern mit EXECUTE ausgeführt wird.
; Dies ermöglicht nun - wie auch mit DPAT und SPAT -
; praktische Shell-ALIAS anzulegen (in S:Shell-Startup), zum
; Beispiel XTREE (das wie DIR arbeitet, aber für alle Files
; unterhalb eines Directories) oder TOUCH (das das Datum aller
; Files in allen Subdirectories verändert):
; alias xtree execute s:rpat echo []
; alias touch execute s:rpat setdate []