#!/bin/rm echo hello world!
lpi1:skripte
Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Kleine Beispiele
Hello World
#!/bin/bash echo hello world!
Beispiel mit if/else
#!/bin/bash if test -n "$1" then echo hello $1 else echo hello world! fi
Rückgabewerte
#!/bin/bash ping -c 1 -w 1 $1 result=$? if test "$result" -eq 0 then echo $1 antwortet elif test "$result" -eq 1 then echo $1 antwortet nicht elif test "$result" -eq 2 then echo $1 nicht gefunden else echo weiss auch nicht fi
Beispiel mit && und ||
#!/bin/bash test -r test.conf && . test.conf test -z "$name" || hello $name
Beispiel mit case
#!/bin/bash case "$1" in start) echo $0 wird gestartet ;; stop) echo $0 wird gestopt ;; restart) $0 stop $0 start ;; *) echo was soll ich tun exit 1 esac
Beispiel mit for
#!/bin/bash for ip in 10 11 12 13 14 do ping -q -c 1 -W 1 192.168.1.$ip >/dev/null && echo 192.168.1.$ip done
Beispiel mit for, seq und Kommandosubstitution
( und einer kleinen Subshell )
#!/bin/bash for ip in $(seq 1 254) do ( ping -q -c 1 -W 1 192.168.1.$ip >/dev/null && echo 192.168.1.$ip ) & done
Beispiel mit while
#!/bin/bash arp -n -a | while read name ip auf mac rest do echo $ip -\> $mac done
Beispiel mit while, case und getopt
#!/bin/bash von=1 bis=10 subnetz= while getopts 'v:b:s:' opt do case "$opt" in v) von=$OPTARG ;; b) bis=$OPTARG ;; s) subnetz=$OPTARG ;; esac done echo -- -v: $von, -b: $bis, -s: $subnetz
Beispiel mit grep, regulärem Ausdruck, id und xargs
(Alle Benutzer und Gruppenzugehörigkeit herausfiltern)
#!/bin/bash grep -o '^[^:]*' /etc/passwd | xargs -L1 id
Etwas größeres Beispiel
Suche Mac-Addressen mit mehreren IP-Adressen im Subnetz
#!/bin/bash # Default Werte von_ip=1 bis_ip=254 # Subnetz, von ip und bis ip aus Konfigdatei lesen test -r mac_search.conf && . mac_search.conf # Kommandozeilenargumente auswerten while getopts 'v:b:s:' opt do case "$opt" in v) von_ip=$OPTARG ;; b) bis_ip=$OPTARG ;; s) subnetz=$OPTARG ;; esac done # Mac-Adressen für alle aktiven IP-Adressen von $1 bis $2 ausgeben function get_mac { for ip in $(seq $1 $2) do # mac-Adresse von erfolgreich gepingten IP-Adressen ausgeben ( ping -q -c 1 -W 1 $3.$ip >/dev/null && arp -a $3.$ip ) & done while test "$(jobs -r|wc -l)" -ne 0 do sleep 1 done } # Doppelte Mac-Adressen ausfiltern function print_double { while read name ip auf mac rest do echo $mac done | sort | uniq -d } get_mac $von_ip $bis_ip $subnetz | print_double
Links zum Shell-Programmieren
- Grundlagen: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
- Advanced Bash Scripting: http://tldp.org/LDP/abs/html/
- Nochmal Grundlagen - anders erklärt: http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html
- AWK: http://www.gnu.org/manual/gawk/html_node/Getting-Started.html (muss man nicht haben, meistens reicht es, print zu kennen!)
1)
Was passiert wohl, wenn man folgendes Skript aufruft:
lpi1/skripte.1365173049.txt.gz · Zuletzt geändert: 2013/04/05 14:44 von ingo_wichmann
