Noch eine Anmerkung (lies dir mal "Quoting" im Bash-Manual durch):
Schau dir mal die Unterschiede an:
#!/bin/bash
#beispiel.sh
if [[ $1 == [0-9] ]] && [[ $2 == [0-9] ]]
then
echo passt
else
echo "passt nicht"
fi
echo '$1: '"$1"
echo '$2: '"$2"
Betrachte folgenden Aufruf des Skripts:
$ ./beispiel.sh 'a == a && 0' 'b == b && 0'
passt
$1: a == a && 0
$2: b == b && 0
die Zeile mit den Markierungen wird expandiert zu:
if [[ a == a && 0 == [0-9] ]] && [[ b == b && 0 == [0-9] ]]
was nur wahre Bedingungen enthält. (obwohl die übergebenen Parameter beide nicht nur aus einer Ziffer bestehen). Im Gegensatz dazu das Skript mit korrigierter Zeile:
if [[ "$1" == [0-9] ]] && [[ "$2" == [0-9] ]]
$ ./beispiel.sh 'a == a && 0' 'b == b && 0'
passt nicht
$1: a == a && 0
$2: b == b && 0
[edit] Hier wurde expandiert zu:
if [[ 'a == a && 0' = [0-9] ]] && [[ 'b == b && 0' == [0-9] ]]
[/edit]
Im zweiten Beispiel wird der Inhalt von $1 nd $2 nicht mehr interpretiert von der Bash (sondern einfach als String gesehen). Richtiges Quoting ist bei Variablen, die Benutzereingben enthalten, besonders wichtig (weil du nicht deren Inhalt bestimmst).
Grüße