Die Bash Variablen und Coding Hints
Ich kann mir auch nach all meinen Jahren mit Linux die zT sehr eigenwillige Syntax der Bash nicht merken. Deshalb diese kleine Hilfe:
| Variable | Bedeutung |
|---|---|
| $1..$n | Positionsparameter. Ab 10 Parametern muss shift benutzt werden. Mit set setzbar. |
| $# | Anzahl gesetzter Positionsparameter. |
| $_ | Momentan gesetzte Shelloptionen. |
| $? | Exit Status des letzten Vordergrundkommandos. |
| $$ | Prozess Identifikationsnummer (PID) der aktuellen Shell. |
| $! | PID des letzten Hintergrundkommandos. |
| $* | Alle Positionsparameter als ein String. |
| $@ | Alle Positionsparameter als einzelne Strings $1 $2 nacheinander. „$@“ ergibt „$1“ „$2“ nacheinander. |
| Variable | |
|---|---|
| CDPATH | Suchverzeichnisse führ den Befehl cd |
| HOME | Das Heimverzeichnis des Benutzers |
| IFS | Input Field Seperator. Trennzeichen zwischen Eingaben. Voreingestellt auf Tab und Leer. |
| LOGNAME | Loginname des Benutzers |
| Mailboxdatei des Benutzers | |
| MAILCHECK | Zeitperiode für die email-Prüfung. Voreingestellt auf 600 (Sek.). |
| MAILPATH | Pfadnamen von Mailboxdateien. Mit : zu trennen. |
| PATH | Suchdirectories für Programme. Voreinstellung ist /bin:/usr/bin |
| PS1 | Primärprompt |
| PS2 | Sekundärprompt |
| SHACCT | Datei für die Abrechnungsinfo (Shell-Accounting) |
| SHELL | Pfadname der Shell. |
| TERM | Terminal des Benutzers |
| TZ | Time Zone. Die Zeitzone des Benutzers. |
Bash-Loop
while test true ; do (chmod 744 index.html ; sleep 1 😉 done.
| Ausdruck | Gibt 0 zurück, wenn… |
|---|---|
| [ -r $datei ] | …datei lesbar ist |
| [ -w $datei ] | …datei schreibbar ist |
| [ -x $datei ] | …datei ausführbar ist |
| [ -f $datei ] | …datei eine normale Datei ist |
| [ -d $datei ] | …datei ein Directory ist |
| [ -c $datei ] | …datei ein Zeichengerät ist |
| [ -b $datei ] | …datei ein Blockgerät ist |
| [ -p $datei ] | …datei eine named pipe ist |
| [ -u $datei ] | …die SUID der datei gesetzt ist |
| [ -g $datei ] | …die SGID der datei gesetzt ist |
| [ -k $datei ] | …das Sticky Bit der datei gesetzt ist |
| [ -s $datei ] | …datei nicht leer ist |
| Ausdruck | Gibt 0 zurück, wenn… |
| [ -t $fd ] | …filedescriptor fd (zahl) einem terminal zugeordnet ist. fd ist 1 ohne fd. |
| Ausdruck | Gibt 0 zurück, wenn… |
| [ -z $str ] | …string str die laenge null hat |
| [ -n $str ] | …string str die laenge ungleich null hat |
| Ausdruck | Gibt 0 zurück, wenn… |
| [ $str1=$str2 ] | …string str1 gleich str2 ist |
| [ $str1!=$str2 ] | …string str1 ungleich str2 ist |
| Ausdruck | Gibt 0 zurück, wenn… |
| [ $i1 -eq $i2 ] | …zahl i1 gleich zahl i2 ist |
| [ $i1 -ne $i2 ] | …zahl i1 gleich zahl i2 ist |
| [ $i1 -gt $i2 ] | …zahl i1 größer zahl i2 ist |
| [ $i1 -ge $i2 ] | …zahl i1 größer gleich zahl i2 ist |
| [ $i1 -lt $i2 ] | …zahl i1 kleiner zahl i2 ist |
| [ $i1 -le $i2 ] | …zahl i1 kleiner gleich zahl i2 ist |
Bash IF Abfrage
if [ „$#“ -lt „3“ ]; then
echo „Das Skript erwartet mindestens 3 Argumente“
exit 1
else
exit 0
fi
# Andere Schreibweise:
[ „$#“ -lt „3“ ] && { echo „Das Skript erwartet mindestens 3 Argumente“; exit 1; }
if [ $UDP -gt $MAX_HITS ]; then
#do something
fi
Bash FOR Schleifen
test -e /tmp/etc$$ || mkdir /tmp/etc$$
for i in `find /etc -type f -maxdepth 1`;
do
test -r $i || continue
cp $i /tmp/etc$$
bzip2 /tmp/etc$$/`basename $i`
done
Bash Case
case word in
pattern1) command;;
pattern2) command;;
esac
Bash while Schleife
while [ „$#“ -gt „0“ ]; do
case $1 in
-a) echo „Option a“
shift;;
-l) echo „Option l“
shift;;
-f) echo „Option f Argument ist $2“
shift 2;;
-F) echo „Option F“
shift;;
*) echo „Unerwartete Option“
# tue etwas…
;;
esac
done
Bash Until
until command
do
command
command
done
Bash Funktionen
function GetAbsolutePathName()
{
test -z „$1“ && exit
Pfad=${1%/*}
Datei=${1##*/}
echo `cd $Pfad 2>/dev/null && pwd || echo $Pfad`/$Datei
}
GetAbsolutePathName /home/benutzer
Bash übergebene Parameter parsen
while [ „$#“ -gt „0“ ]; do
case $1 in
smb) echo „smb“ shift;;
nmb) echo „nmb“ shift;;
*) echo „Unerwartete Option“ ;;
esac
done
Suchen und Ersetzen mit sed
sed ’s/ / /g‘ datei > /tmp/tmp.$$
cat /tmp/tmp.$$ > datei
rm /tmp/tmp.$$
Suchen und Ersetzen mit sed ohne temp file
cat text | sed -e s/\$var1/$var1/g -e s/\$var2/$var2/g -e
cat brief | sed -e s/voegeln/unterhaltung/g -e s/doris/betty/g -e
Suchen und Ersetzen mit perl
perl -pi -e „s/angela/doris/g;“ liebesbrief.txt
hier können auch wildcards verwendet werden um mehrere Dateien auf einmal zu ändern:
perl -pi -e „s/angela/doris/g;“ *.txt
Zeit ausgeben
echo $0 “ gestartet um “ $(date +%Y-%m-%d_%H:%M:%S)







Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!