Linux-Befehle, Shell-Skripte und AWK: Praxisleitfaden
Linux-Befehle, Shell-Skripte und AWK-Programme
In diesem Leitfaden lernst du wichtige Linux-Befehle kennen, schreibst eigene Shell-Skripte und nutzt AWK-Programme zur Verarbeitung von Textdaten.
1. Verzeichnisinhalte mit ls anzeigen
Mit dem Befehl ls werden Dateien und Verzeichnisse aufgelistet. Die Option -l zeigt eine ausführliche Liste:
ls -l
Alle Dateien im Verzeichnis /root/examen anzeigen:
ls -q -m /root/examen
2. Berechtigungen filtern
Mit ls -l | grep ^drwxr-x werden nur Verzeichnisse mit den Rechten drwxr-x angezeigt.
3. Standardpfad und Shell-Skripte
Der Befehl export PATH=/usr/local/bin:/bin:/usr/bin:. legt die Suchpfade fest. Das aktuelle Verzeichnis (.) wird am Ende angehängt.
Ein Skript zum Kopieren einer Datei prüft zunächst, ob zwei Argumente übergeben wurden:
#!/bin/bash
clear
if test -f $1
then
if test -d $2
then
ls $2 | grep -w $1
if test $? -eq 0
then
echo "$1 existiert bereits im Verzeichnis $2\n"
else
cp $1 $2
fi
else
echo "Verzeichnis nicht gültig\n"
exit
fi
else
echo "Datei nicht gültig\n"
exit
fi
Bevorzugt wird die Ausführung mit der Shell bash.
4. Body-Mass-Index mit AWK berechnen
Mit einem AWK-Programm lässt sich der BMI aus der Datei prsnas.dat berechnen. Der BMI wird als Gewicht / (Größe)2 ermittelt. Normalgewicht liegt zwischen 18,5 und 24,99.
BEGIN { FS="#"; OFS="\t" }
{
bmi = $2 / ($3 * $3)
if (bmi >= 18.5 && bmi <= 24.99)
printf "%s\t%2.2f\n", $1, bmi
}
Ausführung: awk -f listado_imc prsnas.dat
5. Befehle im Verzeichnis /usr/bin ausführen
Liegt ein Befehl wie ls im Verzeichnis /usr/bin, kann er durch den Pfad direkt aufgerufen werden. Ist das aktuelle Verzeichnis (.) im PATH enthalten, werden Befehle aus dem Arbeitsverzeichnis gefunden.
6. Dateien suchen und löschen
Leere reguläre Dateien, deren Namen mit a beginnen, werden im Verzeichnis /root/examen gesucht und ohne Rückfrage gelöscht:
find /root/a* -name -size 0 -type f -exec rm -f {} \;
7. Wörter mit Vokal filtern
Aus der Datei palabras.txt werden alle Wörter extrahiert, die mit einem Vokal beginnen oder enden (Groß- oder Kleinschreibung). Das Ergebnis wird in words.txt gespeichert:
grep -i -E "^[aeiou]|[aeiou]$" palabras.txt > words.txt
8. Alias für eine detaillierte Dateiliste
Mit einem Alias lässt sich die Ausgabe von ls -al verkürzen:
alias liste="date +%d%n%t; ls -al"
9. Reguläre Dateien zählen
Die Anzahl der regulären Dateien im aktuellen Verzeichnis ermittelt man mit:
ls -l | grep ^- | wc -l
10. Notenauswertung mit AWK
Die Datei notas_curso enthält Name, Nachname und drei Noten, getrennt durch Kommas. Das AWK-Programm listado_aprobados zeigt alle Studierenden mit einem Notendurchschnitt von mindestens 4,0 an:
BEGIN { FS=","; OFS="\t" }
{
prom = ($3 + $4 + $5) / 3
if (prom >= 4.0)
printf "%s\t%s\t%1.1f\n", $2, $1, prom
}
Ausführung: awk -f listado_aprobados notas_curso
11. Verlauf in der Bash optimieren
Mit den Variablen HISTTIMEFORMAT und HISTCONTROL werden Zeitstempel angezeigt und doppelte Einträge entfernt. Die Einstellungen werden in der Datei .bash_profile des Benutzers gespeichert:
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=erasedups
12. Zeilen mit Zeilennummern anzeigen
Ein Skript mostrar_lineas gibt alle nicht leeren Zeilen einer Datei mit Zeilennummer aus:
#!/bin/bash
clear
echo "Archivo: $1"
i=1
while read lin
do
if test ! -z "$lin"
then
echo -e "$i\t$lin"
i=$(expr $i + 1 | bc)
fi
done < $1
13. Netzwerk-Konnektivität prüfen
Ein Unternehmen mit drei Filialen benötigt ein Skript tstip, das alle 5 Minuten die Erreichbarkeit der Filialen per Ping prüft. Die Ergebnisse werden in tstip_sucursales.log gespeichert. Die IP-Adressen stehen zeilenweise in einer Datei, die als Argument übergeben wird:
#!/bin/bash
clear
while true
do
for ip in $(cat $1)
do
echo "+--------------------------------+" >> tstip_sucursales.log
date +"%d-%m-%Y %T" >> tstip_sucursales.log
ping -c 3 $ip >> tstip_sucursales.log
done
sleep 300
done