Shell-Workshop (8)

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
In diesem Workshop geht es um Aliasse (korrekter Plural nach Duden), Funktionen und Argumente.

In vielen interaktiven Shells gibt es die Alias-Bildung. Also einen weiteren Begriff zu einem bereits bekannten Begriff anlegen und das jetzt auf Linux-Kommandos bzw. -tools angewandt. Im Grunde wird wie bei der Shell-Variablen verfahren, nur dass bei der Definition vorweg noch das Schlüsselwort 'alias' Verwendung findet. 'unalias' hebt eine Alias-Definition wieder auf. Mit alias alleine bekommt man alle bereits bestehenden Alias-Definition angezeigt.

Rich (BBCode):
Syno> print 'Hallo'
-ash: print: not found
Syno> alias print=echo
Syno> print 'Hallo'
Hallo
Syno> alias
dir='ls -al'
ll='ls -la'
Syno> unalias print
Syno> print
-ash: print: not found
Syno>

Will man auch Optionen einem Alias mitgeben, dann ist das einfache Quotieren notwendig. Wenn man z. B. die Eigenschaften und Dateizeiten beim Kopieren beibehalten möchte, dann hilft der BusyBox-cp nicht wirklich weiter. Man muss auf den IPKG-coreutils-cp umsteigen, denn dieser verfügt erst über die notwendigen Eigenschaften und Optionen. Um sich aber zu sparen, jedesmal den Pfad mit anzugeben, ist ein Alias nützlich.

Rich (BBCode):
Syno> cp --preserve=all a1 a10
cp: unrecognized option `--preserve=all'
BusyBox v1.1.0 (2010.04.19-13:36+0000) multi-call binary

Usage: cp [OPTION]... SOURCE DEST

Syno> alias copy='/opt/bin/cp --preserve=all'
Syno> copy a1 a10

Klassiker für Alias-Vereinbarungen sind der 'dir' und der 'll', wie man bereits weiter oben im Beispiel sehen konnte. Typischer Ort für die Alias-Definition ist die .profile im HOME-Directory.

Shell-Funktionen setzt man ein, um auch umfangreichere Kommandofolgen anzusprechen und dabei auch noch Parameter übergeben zu können. Übergabeparameter werden unter Unix/Linux auch Argumente genannt.

Eine Shell-Funktion wird vor ihrem Aufruf definiert. Sie benötigt ähnlich den Regeln einer Shell-Variablen einen Namen, dann ein Klammerpärchen '()' und dann einen in '{}' eingeschlossenen Anweisungsrumpf. Die Anweisungen müssen per ';' oder per Zeilenvorschub abgeschlossen werden.

Rich (BBCode):
Syno> f1() { whoami; uname -a; }
Syno> f1
root
Linux Syno 2.6.15 #1157 Mon Apr 19 21:30:17 CST 2010 armv5tejl unknown

Man kann nun bei Aufruf einer Shell-Funktion Parameter bzw. Argumente mitgeben, die dann innerhalb der Shell-Funktion z.B. mit $1, $2, usw. abgeholt werden können.

Rich (BBCode):
Syno> f2() { echo $1; echo $2; }
Syno> f2


Syno> f2 abc 123
abc
123
Syno> f2 abc 123 xyz
abc
123
Syno>

Man sieht, dass zu viel bei Aufruf angebene Argumente dann verloren gehen. Um die Möglichkeit zu erhalten, auf die gesammte Argumentleiste zugreifen zu können, gibt es 2 spezielle Shell-Variablen: '$*' und '$@'. $* ist einfach ein String mit allen Argumenten. $@ ist ein Pointer-Array und erlaubt auf alle Argumente einzeln zuzugreifen. Hier für wird eine spezielle Form der for-Schleifen-Konstruktion verwendet.

Rich (BBCode):
Syno> f4 () { for P in "$*" ; do echo $P; done; }
Syno> f4 abc 123 xyz
abc 123 xyz
Syno> f5 () { for P in "$@" ; do echo $P; done; }
Syno> f5 abc 123 xyz
abc
123
xyz
Syno> f6 () { for P ; do echo $P; done; }
Syno> f6 abc 123 xyz
abc
123
xyz

Da man eigentlich immer '$@' verwendet, gibt es auch eine default for-Konstruktion, ohne direkte Angabe von '$@' (siehe f6).

=======

Viel Spaß beim Alias-Anlegen und beim Funktionskonstruieren.

Itari


=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.

Shell-Workshop (7)
Shell-Workshop (9)
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat