staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

if Anweisung zum testen von $2

Status: Ungelöst | Ubuntu-Version: Ubuntu GNOME 14.04 (Trusty Tahr)
Antworten |

UnitedBlaze

Anmeldungsdatum:
30. Mai 2018

Beiträge: 28

Moin Moin, ich möchte in meinem Shell Skript den Parameter $2 abfragen ob es sich um ein Zeichen A-Z,a-z,0-9 handelt. Dies möchte ich mit eine If Anweisung lösen, bekomme es aber nicht in die Bedingung richtig rein. Die If darf nur ausgeführt werden wenn wirklich nur EINS der Zeichen in $2 enthalten ist(nicht mehr nicht weniger).

Kann mir da jemand weiterhelfen, bzw. zeigen wie meine Bedingung aussehen muss?

MfG UnitedBlaze

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

1
2
3
if [[ $2 =~ ^[0-9A-Za-z]$ ]]; then
    echo 'match'
fi

UnitedBlaze

(Themenstarter)

Anmeldungsdatum:
30. Mai 2018

Beiträge: 28

Komischerweise funktioniert das nicht. Also ich rufe mein skript wie folgt in der Kommandozeile auf ./meinskript.sh x y z

Dabei wird in $1 das was bei x steht rein geschrieben. Das was bei y in $2 und bei z in $3. In meinem Skript findet nun eine Case Auswahl mit $1 statt, funktioniert auch. Anschließend soll bei einer bestimmten case option nur dann etwas ausgeführt werden wenn $2 im oben genannten Wertebereich liegt. wenn ich die if Anweisung aber wie vorgeschlagen Aufbaue und mein Skript dann ausführe, steht das da:

./meinskript.sh: [[: not found

Warum?

MfG UnitedBlaze

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@UnitedBlaze: Ich ging davon aus das die Bash verwendet wird. Ansonsten würde ich eher case statt if hierfür verwenden.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Es gibt noch das gute alte expr:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ if expr "$2" : '[a-zA-Z0-9]$' >/dev/null; then echo ja; else echo nein; fi
ja
$ set -- aaa .
$ if expr "$2" : '[a-zA-Z0-9]$' >/dev/null; then echo ja; else echo nein; fi
nein
$ set -- aaa 9
$ if expr "$2" : '[a-zA-Z0-9]$' >/dev/null; then echo ja; else echo nein; fi
ja
$ set -- aaa 99
$ if expr "$2" : '[a-zA-Z0-9]$' >/dev/null; then echo ja; else echo nein; fi
nein

Das funktioniert übrigens auch in der sh. Und ansonsten das schon erwähnte case:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ set -- aaa b
$ case "$2" in [a-zA-Z0-9]) echo ja;; *) echo nein;; esac
ja
$ set -- aaa .
$ case "$2" in [a-zA-Z0-9]) echo ja;; *) echo nein;; esac
nein
$ set -- aaa 9
$ case "$2" in [a-zA-Z0-9]) echo ja;; *) echo nein;; esac
ja
$ set -- aaa 99
$ case "$2" in [a-zA-Z0-9]) echo ja;; *) echo nein;; esac
nein
Antworten |