Bash

Vergleichsoperatoren

Integer

Operator Bedeutung Beispiel
-eq gleich == if [ "$a" -eq "$b" ]
-ne ungleich != if [ "$a" -ne "$b" ]
-gt größer als > if [ "$a" -gt "$b" ]
-ge größer gleich >= if [ "$a" -ge "$b" ]
-lt kleiner als < if [ "$a" -lt "$b" ]
-le kleiner gleich <= if [ "$a" -le "$b" ]
> größer als > (("$a" > "$b"))
>= größer gleich >= (("$a" >= "$b"))
< kleiner als < (("$a" < "$b"))
<= kleiner gleich <= (("$a" <= "$b"))

Beispiel:

#!/bin/bash
echo -n "Wert eingeben: "
read a
if [[ "$a" -le 10 && "$a" -gt 5 ]]; then
  echo "5 < $a <= 10"
fi

Testen, ob ein Verzeichnis (nicht) existiert:

#!/bin/bash
if [[ ! -d "${DIR}" ]]; then
  mkdir ${DIR}
fi

Endlosschleife

while [ true ]; do ping -c 1 da7a.de; [[ $? == 0 ]] && break; done;

CPU-belastende Schleifen auf Zeit

cpu-loop:

#!/bin/bash
# cpu-loop
t=$1
s=$SECONDS
while true; do
  x=$((SECONDS-s))
  [ $x -ge ${t:=1} ] && break
done

cpu-loop2:

#!/bin/bash
# cpu-loop2
t=${1}
t=${t:=3}
timeout=$((t*1000000000))
 
start=$(date +%s%N)
timeout_stamp=$((start+timeout))
 
while true; do
  x=$(date +%s%N)
  [ $x -ge ${timeout_stamp} ] && break
done
da7a@data ~ $ time cpu-loop 5
 
real    0m4.899s
user    0m4.572s
sys     0m0.312s
da7a@data ~ $ time sleep 5
 
real    0m5.001s
user    0m0.000s
sys     0m0.000s

Ausgabe(n) weiterleiten oder unterdrücken

$command  > /dev/null # nur standard output
$command 1> /dev/null # nur standard output
$command 2> /dev/null # nur standard error
$command &> /dev/null # standard output und standard error

Variable Variablen

a=b            # Variable a enthält String b
b=test         # Variable b enthält String test
eval c="\$$a"  # c="\$$a"="$b"="test" ($a wird durch b ersetzt und \$ durch $)
               # Variable c enthält String test
# Wird $b anschließend geändert wirkt sich das nicht auf $c aus.

Dateien mit unterschiedlichen zurückliegenden mtimes erstellen

#!/bin/bash
FILEPREFIX=testfile_
STARTDATE=$(date) # Zeit ändert sich während der Laufzeit
for (( i=0; i<10; i++ )); do
  DATE=$(date --date="$STARTDATE $i day ago"
  touch ${FILEPREFIX}${DATE} -t $DATE
done

Dateien, die x Tage alt sind löschen

#!/bin/bash
 
# Version 1.2 (02.03.2006 - 17:44)
 
usage ()
{
    echo "Syntax: $0 [dir] [min. Alter (Tage), mtime]"
    exit $EXITCODE
}
 
# Kommandozeilenparameter prüfen:
# Parameteranzahl ($#)
# Verzeichnis ($1)
# Alter ($2)
 
if [ "$#" != "2" ]; then
	echo "Bitte genau 2 Parameter angeben."
	EXITCODE=1
	usage
fi
 
if ! [ -d "$1" ]; then
	echo "Angegebenes Verzeichnis existiert nicht"
	EXITCODE=2
	usage
fi
 
if [ "$2" -le 0 ]; then
	echo "Zeitangabe ungültig (1..n Tage)"
	EXITCODE=3
	usage
fi
 
# Variablen initialisieren
### find Parameter
# Pfadtiefe (ausschließlich angegebenes Verzeichnis)
FINDPARAM="-maxdepth 1 -mindepth 1"
# Zeit (zuletzt modifiziert vor mindestens $2 Tagen)
TIME=$(($2-1))
FINDPARAM="$FINDPARAM -mtime +$TIME"
# print0 - Dateiname durch 0-Character trennen
FINDPARAM="$FINDPARAM -print0"
 
# Ausführen...
find $1 $FINDPARAM | xargs -0 rm -f
 
linux/bash.txt · Zuletzt geändert: 11.11.2007 05:04:32 von da7a