echo3  | 
       5 Beispiele für die Verarbeitung von Parametern
  | 
  |  | 
     
     
       .1  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die ersten drei Parameter haben die Werte:" 
echo "   $1" 
echo "   $2" 
echo "   $3" 
  
 
  | 
  |  | 
     
     
       .2  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die ersten drei Parameter haben die Werte:" 
echo "   $1"; shift 
echo "   $1"; shift 
echo "   $1" 
  
 
  | 
  |  | 
     
     
       .3  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die ersten drei Parameter haben die Werte:" 
  
if test "$1" 
then 
  echo "   $1"; shift 
  if test "$1" 
  then 
    echo "   $1"; shift 
    if test "$1" 
    then 
      echo "   $1" 
    fi 
  fi 
fi 
  
 
  | 
  |  | 
     
     
       .4  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die ersten drei Parameter haben die Werte:" 
  
[ $ 
[ $ 
[ $ 
  
 
  | 
  |  | 
     
     
       .4a  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die ersten drei Parameter haben die Werte:" 
  
[ $ 
[ $ 
[ $ 
  
 
  | 
  |  | 
     
     
       .5  | 
       
  
echo "$0 wurde mit $# Parameter(n) aufgerufen." 
echo "Die Parameter haben die Werte:" 
  
while [ $ 
do 
   echo "   $1"; shift 
done 
  
 
  | 
  |  | 
     
     
       Optionen  | 
       Verarbeitung von Optionen mit einem case-Verteiler
  | 
        | 
       
  
while [ $ 
do 
 case "$1" in 
  -c | -o) echo "Option -c oder -o" 
    ;; 
  -*) echo "unbekannte Option $1" 
    ;; 
  *.c | *.h ) echo "C Quelle $1" 
    break 
    ;; 
  *) echo "unbekannter Parameter $1" 
    exit 1 
 esac 
 shift 
done 
  
 
  | 
  |  | 
     
     
       bundle  | 
       ein einfaches Skript zum Bündeln von Textdateien
in Form eines sich selbst entpackenden Archivs
  | 
  |  | 
     
     
        | 
       
  
  
echo '#!/bin/bash' 
echo '# zum Auspacken, sh auf diese Datei anwenden' 
  
for i in $* 
do 
   echo "echo $i 1>&2" 
   echo "cat >$i <<'Ende von $i'" 
   cat $i 
   echo "Ende von $i" 
done 
  
 
  | 
  |  | 
     
     
       2.Version  | 
       Bündeln von ganzen Verzeichnisbäumen
in Form eines sich selbst entpackenden Archivs
  | 
  |  | 
     
     
        | 
       
  
  
echo "$0 : fuer dateien $*" 1>&2 
  
echo '#zum Auspacken, sh auf diese Datei anwenden' 
  
for i in $* 
do 
  if [ -f $i ] && [ -r $i ] && [ -s $i ] 
  then 
     
    echo "echo $i 1>&2" 
  
    echo "cat >$i <<'Ende von $i'" 
    cat $i 
    echo "Ende von $i" 
  
  elif [ -d $i ] 
  then 
  
     
    $0 $i/* 
  
  else 
    echo "# datei $i konnte nicht kopiert werden" 
  
     
    echo "datei $i kann nicht kopiert werden"     1>&2 
  fi 
done 
  
 
  | 
  |  | 
     
     
       3.Version  | 
       sicheres Bündeln von ganzen Verzeichnisbäumen
ohne Probleme mit den Endemarken in inline-Dokumenten
  | 
  |  | 
     
     
        | 
       
  
echo '#!/bin/bash' 
echo '# zum Auspacken /bin/bash auf diese Datei anwenden' 
  
  
for i in $* 
do 
  if [ -f $i ] && [ -r $i ] && [ -s $i ] 
  then 
    echo "echo $i 1>&2" 
  
    echo "sed 's/^+//' >$i <<'Ende von $i'" 
    sed 's/^/+/' $i 
    echo "Ende von $i" 
  
  elif [ -d $i ] 
  then 
    echo "[ -d $i ] || mkdir $i" 
    $0 $i/* 
  
  else 
    echo "# datei $i konnte nicht kopiert werden" 
    echo "datei $i kann nicht kopiert werden" 1>&2 
  fi 
done 
  
 
  | 
  |  | 
     
     
       4.Version  | 
       sicheres Bündeln von ganzen Verzeichnisbäumen
ohne Probleme mit Sonderzeichen in Dateinamen
  | 
  |  | 
     
     
       Problem  | 
       Sonderzeichen in Dateinamen
         | 
     
     
        | 
       
touch "a b c" 
  
for i in a* 
do 
  ls -l $i 
done 
  
for i in a* 
do 
  ls -l "$i" 
done 
 
  | 
  |  | 
     
     
       Lösung  | 
       für bundle
         | 
     
     
        | 
       
  
  
echo '#!/bin/bash' 
echo '# zum Auspacken /bin/bash auf diese Datei anwenden' 
  
for i in "$@" 
do 
  if [ -f "$i" ] && [ -r "$i" ] && [ -s "$i" ] 
  then 
    echo "echo \"$i\" 1>&2" 
    echo "sed 's/^+//' > \"$i\" <<'Ende von $i'" 
    sed 's/^/+/' "$i" 
    echo "Ende von $i" 
  else 
  if [ -d "$i" ] 
  then 
    echo "[ -d \"$i\" ] || mkdir \"$i\"" 
    for j in "$i/"* 
    do 
      $0 "$j" 
    done 
  else 
    echo "# datei $i konnte nicht kopiert werden" 
    echo "datei $i kann nicht kopiert werden" 1>&2 
  fi 
  fi 
done 
  
 
  | 
  |  | 
     
     
        | 
        schrittweise Verfeinerung und Vervollständigung von
Skripten
         |