next | next | up | down | Inhalt | Uebungen | Complete | Kommentar

all, section 7.1.

7.1.  Boot-Diskette

Für den Fall, daß ein System ernsthaft kaputtgeht, sollte man sich zum Beispiel ein minimales System auf Diskette zurechtlegen. UNIX-Kerne sind heute jedoch so groß, daß man nur noch sehr wenige Programme in einem solchen Mini-System zur Verfügung stellen kann. Die folgenden Funktionen emulieren deshalb verschiedene nützliche Programme nur mit Hilfe der Shell und dd Da man sie im Ernstfall eintippen muß, sind sie möglichst kurz und nicht unbedingt robust.

Cat

 1              cat() { # [file ...]    simuliert cat mit dd
 2                      if [ $# = 0 ] 
 3                      then    dd 2>&-
 4                      else    for i
 5                              do      dd 2>&- < $i
 6                              done
 7                      fi
 8              }
 9      

Cut

 1      cut() { # [field-number]    extrahiert ein [erstes] Feld
 2               nf=${1:-1}
 3               while read line
 4               do      set -- $line
 5                       eval echo \$$nf
 6               done
 7      }
 8      

Five -- fünf Argumente pro Zeile

 1      five() { # arg...       fuenf Argumente pro Zeile
 2              until [ $# -lt 5 ]
 3              do      echo "$1 $2 $3 $4 $5"
 4                      shift; shift; shift; shift; shift
 5              done
 6              [ $# -gt 0 ] && echo "$*"
 7      }

ls -R

 1      lsR() { # [path...]             rekursiv, eingerueckt
 2              [ $# = 0 ] && set -- *
 3              for i
 4              do      if [ -f "$i" ]
 5                      then    echo "$indent$i"
 6                      elif [ -d "$i" ]
 7                      then (  echo "$indent$i"/
 8                              cd "$i"
 9                              indent="$indent  "; lsR
10                      ) fi
11              done
12      }

ls -L

 1      lsL() { # [path...]             viel Information
 2              [ $# = 0 ] && set -- *
 3              for i
 4              do      if   [ -f $i ]; then t=-
 5                      elif [ -d $i ]; then t=d
 6                      elif [ -c $i ]; then t=c
 7                      elif [ -b $i ]; then t=b
 8                      elif [ -p $i ]; then t=p
 9                      fi
10                      r=-; [ -r $i ] && r=r
11                      w=-; [ -w $i ] && w=w
12                      if [ -x $i ]
13                      then    x=x; [ -u $i ] && x=s
14                      else    x=-; [ -u $i ] && x=S
15                      fi
16                      echo $t$r$w$x $i
17              done
18      }

ls -- rekursiv, volle Pfade

 1      lsP() { # [path...]             rekursiv, volle Pfade
 2              [ $# = 0 ] && set -- *
 3              for i
 4              do      if [ -f "$i" ]
 5                      then    echo "$indent$i"
 6                      elif [ -d "$i" ]
 7                      then (  cd "$i"
 8                              indent="$indent$i/"; lsP
 9                              echo "$indent"
10                      ) fi
11              done
12      }

Gruppen von fuenf Zeilen ausgeben

 1      pg() { #        Gruppen von fuenf Zeilen ausgeben
 2      (       pglen=xxxxx IFS=
 3              while read line
 4              do      echo "$line"; count=x
 5                      until [ $count = $pglen ]
 6                      do      read line || break 2
 7                              echo "$line"; count=x$count
 8                      done
 9                      read line </dev/tty
10              done
11      )
12      }


back | next | up | down | Inhalt | Uebungen | Complete | Kommentar


Created by unroff & hp-tools. © by Hans-Peter Bischof. All Rights Reserved (1997).

Last modified 03/July/97