8. Programmieren unter Linux

1. /bin/sh
8.1.1. Wo finde ich Doku zu Shell-Programmierung?
8.1.2. Was hat es mit !# /bin/sh auf sich?
8.1.3. Schleife über Dateien mit Sonderzeichen im Namen?
8.1.4. Was funktionieren find, -exec und xargs?
2. C, C++ & Unix
8.2.1. Wo finde ich Doku zu C & C++?
8.2.2. Programmieren unter Unix & Linux?

1. /bin/sh

8.1.1. Wo finde ich Doku zu Shell-Programmierung?

UNIX Shellprogrammierung

http://kris.koehntopp.de/artikel/unix/shellprogrammierung/

Bourne-Shell als Kommando- und Programmiersprache

http://www.tu-chemnitz.de/urz/kurse/unterlagen/shell-progr/bourne/bourne.html

SHELLdorado - your UNIX shell scripting resource

http://www.shelldorado.de/links/index.html#tutorials

Advanced Bash-Scripting Guide

http://www2.uibk.ac.at/linuxdoc/LDP/guides.html#abs

Bash Guide for Beginners

http://tille.xalasys.com/training/bash/book1.html

System shells on various Unix flavours

http://www.in-ulm.de/~mascheck/various/

Und nicht zu vergessen: man 1 bash

8.1.2. Was hat es mit !# /bin/sh auf sich?

Darf da ein Leerzeichen stehen? Oder muss da gar ein Leerzeichen stehen portable Lösung?

http://www.in-ulm.de/~mascheck/various/shebang/#specialities

8.1.3. Schleife über Dateien mit Sonderzeichen im Namen?

Die portable Lösung.


find . -type f | while read -r file; do
  echo "[$file]"
done

Die Lösung für GNU und FreeBSD kommt auch mit Zeilenwechsel im Dateinamen zurecht.


find .  -type f -print0 | while read -rd $'\0' file; do
  echo "[$file]"
done

8.1.4. Was funktionieren find, -exec und xargs?

find durchsucht eine oder mehrere Verzeichnishierarchien nach Dateien (oder Verzeichnissen) mit bestimmten Eigenschaften, und führt damit bestimmte Aktionen aus. Interessant wird es, wenn man eigene Kommandos auf die gefundenen Dateien anwenden will. Dazu gibt es zwei Ansätze:

-exec   command   ;

Dadurch wird für jede gefundene Datei command gestartet. Der Zeichenkette {} in command wird dabei durch den Dateinamen ersetzt.

Der Nachteil dieser Lösung ist die Geschwindigkeit. Viele Programme können von sich aus mit mehreren Argumenten in einer Kommandozeile umgehen. Für jedes einzelne Argument einen separaten Prozess zu starten ist ineffizient.

-exec   command   {}   +

Hier wird command mit soviel Argumenten, wie in die Kommandozeile passen, aufgerufen. Leider gibt es diese Option nicht überall. GNU find unterstützt das erst seit kurzem.

-print   |   xargs   command

-print0   |   xargs   -0   command

http://www.gnu.org/software/findutils/manual/find.html

2. C, C++ & Unix

8.2.2. Programmieren unter Unix & Linux?