Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


fortgeschrittene:skripte

Dies ist eine alte Version des Dokuments!


for-Schleife

for RECHNER in 22 04 05
do
  ssh nutzer$RECHNER@notebook$RECHNER play /usr/share/sounds/phone.wav
done

Alle Rechner von 201 bis 230 anpingen:

for IP in {201..230}
do  
  ping -c 1 192.168.1.$IP
done

Umbenennen von allen Dateien, die auf .txt enden nach .bak:

shopt -s nullglob
for DATEI in *.txt
  do
  mv $DATEI ${DATEI%.txt}.bak
done

while

Netzwerk EKG

ping 192.168.1.7 | while read; do play /usr/share/sounds/info.wav; done

until

warten bis Tunnel aufgebaut ist

ssh -i /root/.ssh/backup-id_dsa backup@server -n -N -L 873:localhost:873 &
SSHPID=$!
echo wait for connection to localhost:873
until lsof -i4TCP:873; do echo -n .; sleep 1; done
echo
echo got connection

tunnel nutzen … und dann wieder schließen

kill $SSHPID

case in Init-Skripten

Vereinfachtes Beispiel für ein init-Skript:

#!/bin/bash
case "$1" in
  start)
    date
  ;;
  stop)
    date
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  *)
  echo usage $0 [start] [stop] [restart]
  ;;
esac

here-Dokument für Templates

Here Dokumente als Templates 1):

VARIABLE=test
cat <<-HTML;
        <html>
          <head>
            <title>Variable ist $VARIABLE</title>
          </head>
          <body>
            bla
          </body>
        </html>
        HTML

Hier das selbe ohne Variablenersetzung:

VARIABLE=test
cat <<-'HTML';
        <html>
          <head>
            <title>Variable ist $VARIABLE</title>
          </head>
          <body>
            bla
          </body>
        </html>
        HTML

Suchen und Ersetzen mit sed

#!/bin/bash
 
SUCHWORT="$1"
ERSATZTEXT="$2"
DATEI="$3"
 
TMPFILE=`mktemp`
sed "s/$SUCHWORT/$ERSATZTEXT/g" "$DATEI" > "$TMPFILE"
cat "$TMPFILE" > "$DATEI"
rm "$TMPFILE"

oder einfacher

#!/bin/bash
 
SUCHWORT="$1"
ERSATZTEXT="$2"
DATEI="$3"
 
sed -i "s/$SUCHWORT/$ERSATZTEXT/g" "$DATEI"

Suchen und Ersetzen mit perl

#!/bin/bash
 
SUCHWORT="$1"
ERSATZTEXT="$2"
DATEI="$3"
 
perl -pi -e "s/$SUCHWORT/$ERSATZTEXT/g" "$DATEI"

Suchen und Ersetzen mit ksh/bash

#!/bin/bash
 
SUCHWORT="$1"
ERSATZTEXT="$2"
DATEI="$3"
 
TMPFILE=`mktemp`
while read line
do
    line=${line//${SUCHWORT}/${ERSATZTEXT}}
    echo "${LINE}" > $TMPFILE
done < ${DATEI}
mv $TMPFILE ${DATEI}

Gruppierung und sed

sed -n 's/nutzer\([0-9]\+\)/\1nutzer/pg' /etc/passwd
sed -n 's/^\([^:]\+:[^:]*:\)\([[:digit:]]\{4\}\):/\11\2:/p' /etc/passwd
 
#            \1            \2 (uidNumber)
sed -nr 's/^([^:]+:[^:]*:)([[:digit:]]{4}):/\11\2:/p' /etc/passwd

Gruppierung und perl

perl -p -e '
s/
  (   nutzer(\d+)   ): # Benutzername \1, nutzer-nummer \2
  (   [^:]*         ): # Passwort \3
  \d+:                 # UidNumber
/\1:\3:5\2:/x          # Ersatztext
' /etc/passwd

usage-Meldung mit Shell-function und or

#!/bin/bash
function usage()
{
  echo $0 suchwort ersatztext datei
  exit 1
}
 
test $# -eq 3 || usage

Fehlersuche

set -x einschalten: Jede Zeile wird ausgegeben, bevor sie ausgeführt wird.

set -e einschalten: Programm bricht beim ersten Fehler ab

Fehlermeldungen für mehrere Befehle umleiten:

exec 4>&2
exec 2>/dev/null

.. Befehle ..

exec 2>&4
exec 4>&-

Fehlermeldungen wiederherstellen und Kanal 4 schließen

Dokumentation

1)
Das - vor dem Begrenzungstext sorgt dafür, daß Tabulator-Zeichen am Zeilenanfang ignoriert wird. Damit bekommt man schönere Formatierung hin
fortgeschrittene/skripte.1321292513.txt.gz · Zuletzt geändert: 2011/11/14 17:41 von ingo_wichmann