Navigation
« 

Anonymous




Register
Login
« 
« 

Amiga Future

« 

Community

« 

Knowledge

« 

Last Magazine

The Amiga Future 168 will be released on the 5th May.

The Amiga Future 168 will be released on the 5th May.
The Amiga Future 168 will be released on the 5th May.

The Amiga Future 168 will be released on the 5th May.
More informations

« 

Service

« 

Search




Advanced search

Unanswered topics
Active topics
« 

Social Media

Twitter Amigafuture Facebook Amigafuture RSS-Feed [german] Amigafuture RSS-Feed [english] Instagram YouTube Patreon WhatsApp
« 

Advertisement

Amazon

Patreon

« 

Partnerlinks

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 []