#!/bin/sh ## Hier kommt die Funktion usage(). Funktionen müssen VOR dem Hauptcode stehen. # Bash will nur wissen was es eben gibt. Code wird hier noch keiner ausgeführt! usage() { # Bitte erst main code lesen! (siehe unten) echo "$0 [-d] [-r \"reg.ausdr\"] [directory]" >&2 echo " -d nur Verzeichnisse auflisten" >&2 echo " -r nur Verzeichnisse und Dateien, die durch reg. Ausdruck abgedeckt sind" >&2 } ## Hier kommt die Funktion baum(). Funktionen müssen VOR dem Hauptcode stehen. # Bash will nur wissen was es eben gibt. Code wird hier noch keiner ausgeführt! baum() # baum - fuer die graphische Baum-Ausgabe verantwortlich { # Bitte erst main code lesen! (siehe unten) if [ ! -x "$1" ] ; then echo -e "-x\c "; exit; fi cd $1 # Setzen der Positionsparameter mit allen Namen des Directories; set -f set "" `ls -a 2>/dev/null` || { echo -e "-r\c "; exit; } shift if [ $# -eq 2 ]; then echo -e "-\c "; fi ; args="$*"; argus="" if [ -n "$OPTION" ] # Abarbeiten der angegebenen Optionen then case $OPTION in *d*) for i in $args do [ -d "$i" ] && argus="$argus $i" done args="$argus" argus="";; esac case $OPTION in *r*) for i in $args do if [ -d "$i" ] || case $i in $ra) :;; *) false;; esac then argus="$argus $i" fi done args="$argus" argus="";; esac fi if [ -n "$args" ] # Setzen der Positionsparameter mit den verbliebenen Dateien then set "" `ls -adF $args 2>/dev/null` else set "" fi shift # Um ersten leeren Positionsparameter zu beseitigen while [ -n "$2" ] # Ausgabe des graphischen Baumteils do if [ "$1" != "./" -a "$1" != "../" ] then echo "\n${striche}|----$1\c " if [ -d "$1" ]; then (striche="${striche}| "; baum $1 ); fi fi shift done if [ -n "$1" -a "$1" != "./" -a "$1" != "../" ] then if [ -d "$1" ] then echo -e "\n${striche}\`----$1\c " striche="${striche} "; baum $1 else echo -e "\n${striche}\`----$1\n${striche}\c " fi fi } ## MAIN CODE START trap 'echo; exit' 0 1 2 3 15 # Trap wir ausgeführt wenn das Script ein signal 0,1,2,3 oder 15 erhält. ## Hier die Auflistung: #trap -l # 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL # 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE # 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 #13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT #17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP #21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU #25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH #29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN #35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 #39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 ##43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 #47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 #51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 #55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 #59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 #63) SIGRTMAX-1 64) SIGRTMAX while getopts dr: opt # Abarbeiten der angegebenen Optionen do case $opt in ## hier werden die argumente wie z.b. -d und -r abgearbeitet bzw gefiltert. d) OPTION="${OPTION}d";; # $OPTION enthält hier z.b. "d" r) OPTION="${OPTION}r";ra="$OPTARG";; # sollte die -r Option angegeben sein, wird der Suchausdruck mit an $ra rangehängt \?) usage; exit 1;; esac ## Beispiel 1: #Aufruf: ./tree2.sh -r file #Inhalt der variable #$OPTION ist dann "r" #Inhalt von $ra ist dann "file" ## Beispiel 1: #Aufruf: ./tree2.sh -d #Inhalt der variable #$OPTION ist dann "d" #Inhalt von $ra ist dann "NULL" bzw nix, leer, nada echo $OPTION $ra exit done shift `expr $OPTIND - 1` dir=${1:-`pwd`} # Bestimmen der Wurzel des auszugebenden Baums if [ ! -d "$dir" ] ; then echo "$0: $dir ist kein Directory" >&2 ; exit 1 ; fi echo -e "$dir\c " baum $dir ## MAIN CODE END