#!/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 STARTtrap '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) SIGRTMAXwhile getopts dr: opt # Abarbeiten der angegebenen Optionendo 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 exitdoneshift `expr $OPTIND - 1`dir=${1:-`pwd`} # Bestimmen der Wurzel des auszugebenden Baumsif [ ! -d "$dir" ] ; then echo "$0: $dir ist kein Directory" >&2 ; exit 1 ; fiecho -e "$dir\c "baum $dir## MAIN CODE END