[gelöst] bash + regex (auf domain prüfen)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

[gelöst] bash + regex (auf domain prüfen)

Beitrag von jhr-online » 24.01.2007 00:12:17

Ich habe nur ein kleines Problem:
$DOMAIN soll darauf getestet werden, wirklich eine domain zu beinhalten; am liebsten per regex, also in der Art

Code: Alles auswählen

if [[ "$DOMAIN" =~ irgendwas ]]
wobei das irgendwas alles in der Form http://www.domain.tld und einfach domain.tld zulassen soll. Ich kann dieses Zeugs einfach nicht...
Btw: gibt es ein Gegenstück zu "=~"? Ich brauche nämlich eigentlich den Fall, dass es nicht stimmt...

jhr
Zuletzt geändert von jhr-online am 24.01.2007 11:58:27, insgesamt 1-mal geändert.
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Beitrag von Six » 24.01.2007 02:07:35

Hmh, auf die Schnelle.

! negiert den Test

Code: Alles auswählen

test $DOMAIN != "foo"
Reguläre Ausdrücke sind ohne Hilfe von Programmen etwas beschränkt. Im wesentlichen sind es die, die auch für Dateisystemoperationen gelten, sowie diejenigen, die egrep versteht. Um kompliziertere Fälle abzufragen würde ich auf awk ausweichen, aber vielleicht geht es auch anders. Ich bin nicht so der Bash-Held ;-)
Be seeing you!

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Beitrag von 123456 » 24.01.2007 10:03:39

regex vielleicht in der Art...
(http:\/\/)?(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z.]{2,6}

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Beitrag von jhr-online » 24.01.2007 10:40:17

ub13, das reicht für meine Zwecke allemal, danke!
six, != negiert ==, aber was negiert =~?

jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Beitrag von 123456 » 24.01.2007 10:42:30

jhr-online hat geschrieben:das reicht für meine Zwecke allemal
Du musst noch ausprobieren, ob Du die Klammern und geweiften Klammern noch escapen musst. Da bin ich mir nicht sicher...

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 24.01.2007 11:13:56

jhr-online hat geschrieben:ub13, das reicht für meine Zwecke allemal, danke!
six, != negiert ==, aber was negiert =~?

jhr
!~

123456
Beiträge: 6126
Registriert: 08.03.2003 14:07:24

Beitrag von 123456 » 24.01.2007 11:35:35

bsp:

Code: Alles auswählen

#!/bin/bash
string='world.com'
regex='^(http:\/\/)?(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z.]{2,6}$'
if [[ $string =~ $regex ]]; then
    echo "Hallo"
fi
exit
Also - escapen braucht man nicht, dafür aber muss man Anfang und Ende begrenzen (^,$). Beim Negieren einfach "if ! ...." schreiben...

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Beitrag von jhr-online » 24.01.2007 11:58:05

Danke dir, mein script ist komplett... (auch dank silke und mistersixt im Chat).

jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

Antworten