ui, danke für deine sehr ausführliche stellungsnahme zu meinem skript - mache erste seit gestern richtig was mit bash-skripten - sonst waren es immer nur einzelne zeilen...
Und ich dachte mir schon, daß es "zusammengestoppelt" wirkt. Als ob nicht alles aus ein und derselben Feder stammte.

Die (()) Konstruktionen und die Schleifen passen einfach nicht zu den fehlenden Abstraktionsvariablen.
Literaturtip:
Advanced Bash-Scripting Guide
Code:
# Snipped [...]
Sichere_Ordner $HOME"/Projekte" "$zielordner"
Sichere_Ordner $HOME"/Library/" "${zielordner}Private Library/"
Sichere_Ordner "/Library/" "${zielordner}Globale Library/"
Sichere_Ordner "/Volumes/Windows HD/Dokumente und Einstellungen/Jakob" "${zielordner}Windows HD/"
Du solltest Dich mit Dir selbst auf eine Syntax einigen. So ist das Kraut und Rüben. Einmal verwendest Du $zielordner, einmal ${zielordner}. Du solltest überall die idente Schreibweise verwenden. In dem Fall ${zielordner}. Das erleichtert im Zweielsfall ein
Suchen und Ersetzen und man kann sicher sein, daß man alle erwischt. Es ist übrigens ein durchaus relevanter Unterschied zwischen /Library und /Library/. Bei letzterer Schreibweise wird im Ziel kein Ordner Library angelegt und
nur dessen Inhalt gebackupped. Damit kopierst Du unter umständen die Inhalte zweier Ordner ineinander, was sie als Backup relativ wertlos macht und im blödesten Fall überschreibt einer den anderen.
ich hab gelesen, dass es mit dem parameter probleme gibt, da rsync dann immer zu viele dateien kopiert - werde es aber mal ausprobieren...
EDIT: wie ich es auch gelesen hatte: es werden jedes mal alle resourcefork dateien wieder neu kopiert... was nun? weglassen?
Besser als wenn
garkeine Resourceforks übertragen werden und Dein Backup einige defekte oder unvollständige Dateien enthält sowie sämtliche Finder Kommentare verliert. Mit 10.4.9 sind solche Probleme zum Glück Vergangenheit, da Apple rsync wieder mal upgedatet hat.
meinst du ein "#!/bin/bash" am anfang? dann hab ich das jetzt...
Ja, das ist das
Shebang mit dem jedes Shell Skript eingeleitet wird.
ich wollte erst 2-dimensionale arrays machen, habe aber nicht so schnell rausgefunden, wie das genau geht.[...]
Was wohl hauptsächlich daran liegt, daß bash2 nur eindimensionale Arrays unterstützt und man mehrdimensionale Arrays nur mit viel Aufwand simulieren kann. Das ist definitv
Advanced Shell Scripting.
das liegt daran, dass ich immer fehler habe...

und zwar zugriffsrechte-fehler:
sync: opendir "/Library/Logs/Console/0" failed: Permission denied (13)
rsync: opendir "/Library/Logs/Console/502" failed: Permission denied (13)
etc... ich will nicht mein admin-passwort eingeben müssen. wie kann ich solche fehler hinterher abfragen?
Zwei Ansätze zu diesem "Problem".
Laß die Dinge von denen Du weist, daß Du sie nicht kopieren können wirst, bzw. die unsinnig sind einfach präventiv weg. Es ist nicht sinnvoll die Console Logs zu kopieren, ebenso wie es abartig wäre Ordner wie ~/Library/Caches zu sichern.
Die brauchst Du definitiv nicht, wenn Du Dein Backup brauchst. Spar Dir daher die Zeit und den Speicherplatz. (siehe rsync excludes)
In /Library mußt Du damit rechnen als nicht-Admin Leseprobleme zu haben. da hilft nur, entweder als admin bzw. gar als root (mit sudo) Aufrufen, oder diese Dinge weglassen.
Der andere Ansatz wäre den Rückgabewert von rsync abzufragen. In der Variable $? steht immer der Exit Status des letzten Commands drinnen. Ist alles gut gegangen bekommst Du überlicherweise, und auch bei rsync eine 0 zurück. Somit kannst Du also festellen
ob ein Fehler aufgetreten ist. Ein Problem bei rsync ist, daß ein Rückgabewert ungleich 0 nicht zwangsläufig bedeutet, daß
nur dieser Fehler aufgetreten ist, sondern nur, daß dies der
letzte Fehler war. Um
alle Fehler zu finden müßte man den Kompletten Output von rsync in ein Log schreiben und dann dort rausparsen und bewerten. Eine Aufgabe der ich mich gerade mit meinem eigenen Skript widme. Einigermaßen Aufwändig kann ich Dir sagen.
ja, starte das skript mit dosomethingwhen, wenn dich die externe festplatte einschalte...
mal nebenbei: wie kann ich das skript unterbrechen und den benutzer zu der eingabe von ja oder nein bringen?
User Input im Terminal gibts mit read(1). Das setzt aber voraus, daß Dein Skript in einer interaktiven Shell läuft. Je nachdem wie DSW das Aufruft kann es sein, daß Du keine Möglichkeit hast als User auf die Frage zu antworten, wenn beispielsweise kein Terminal geöffnet wird.
Einfach wäre das für Dich so zu lösen, daß Du mit DSW ein AppleSkript aufrufst in dem der User gefragt wird ob er nun Backuppen möchte und wenn er ja sagt, dann aus AppleSkript heraus das ShellSkript aufrufen.
Gruß Pepi