Page 1 of 1

BASH: conditional binary operator expected

Posted: 2006-09-12 15:27
by prodigy7
Hallo zusammen,

mein erster Post hier im Forum und gleich eine Frage :-)

Ich hab folgende Zeile

Code: Select all

[[ "$NAMELINE" =~ ""([^']*)"" ]] && XENHOSTNAME=${BASH_REMATCH[1]}'
Funktioniert mit BASH Version 3.1.17 einwandfrei, BASH Version 2.05b.0 hat aber ein Problem damit:
conditional binary operator expected
syntax error near `=~'
Gibts da irgendeinen Trick oder unterstützt die BASH-Version das Feature noch nicht? Wenn das so sein sollte: Wie kann ich mir üblichen GNU Utils (möglichst kein Perl, Ruby oder was es sonst so für Programmiersprachen gibt - soll auf einem System laufen mit "minimaler" Ausstattung) das ganze "nachbilden" ? Mir ist es wichtig, den Match als Ergebnis in eine Variable zu schreiben.

prodigy7

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 15:41
by Joe User

Code: Select all

s/=~/~=/

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 15:44
by prodigy7
Joe User wrote:

Code: Select all

s/=~/~=/

Code: Select all

[[ "$NAMELINE" ~= ""([^']*)"" ]] && XENHOSTNAME=${BASH_REMATCH[1]}'
-bash: conditional binary operator expected
-bash: syntax error near `~='

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:11
by Roger Wilco
Der Operator =~ existiert erst seit Bash Version 3, siehe z. B. http://www.tldp.org/LDP/abs/html/bashver3.html. Um trotzdem an den gewünschten Part zu kommen, würde ich sed empfehlen...

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:14
by prodigy7
Roger Wilco wrote:Um trotzdem an den gewünschten Part zu kommen, würde ich sed empfehlen...
Kannst du mir netterweise zeigen, wie obiges in sed aussehen würde?

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:25
by mattiass
prodigy7 wrote:
Roger Wilco wrote:Um trotzdem an den gewünschten Part zu kommen, würde ich sed empfehlen...
Kannst du mir netterweise zeigen, wie obiges in sed aussehen würde?
Warum nicht mit "grep"?

echo $VARIABLE | grep -e 'regulärer ausdruck'

Grep kommt mit 0 zurück, wenn der String matcht und mit verschieden von Null, wenn er nicht matcht...

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:27
by prodigy7
MattiasS wrote:Grep kommt mit 0 zurück, wenn der String matcht und mit verschieden von Null, wenn er nicht matcht...
Weil ich den Match gerne weiterverwenden möchte. Nur das wissen, das es Matched, bringt mir nichts.

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:28
by Roger Wilco
Du kannst das Ergebnis von grep in einer Variablen speichern, die du weiterbenutzt.

Du willst dich ein wenig mit Shellscripting beschäftigen. ABS wäre mal ein Anfang.

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:35
by mattiass
prodigy7 wrote:
MattiasS wrote:Grep kommt mit 0 zurück, wenn der String matcht und mit verschieden von Null, wenn er nicht matcht...
Weil ich den Match gerne weiterverwenden möchte. Nur das wissen, das es Matched, bringt mir nichts.
Dann doch vielleicht sed. Vielleicht lässt sich Dein Problem aber auch einfacher lösen. Evtl genügt eine Änderung des Feldseparators oder vielleicht findet man mit awk schnell das gewünschte Feld. Bring doch mal ein Beispiel...

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:41
by prodigy7
MattiasS wrote:Dann doch vielleicht sed. Vielleicht lässt sich Dein Problem aber auch einfacher lösen. Evtl genügt eine Änderung des Feldseparators oder vielleicht findet man mit awk schnell das gewünschte Feld. Bring doch mal ein Beispiel...
Also es handelt sich um eine Zeile, die ich aus der XEN-Konfiguration rausgreppe:
vif = [ 'bridge=xenbr0,vifname=vif1.0' ]
Nun möchte ich wissen, wie das IF heißt dass dort konfiguriert ist.
Hierfür funktioniert

Code: Select all

[[ "$VIFLINE" =~ ".*vifname=([^']*).*" ]] && XENVIF=${BASH_REMATCH[1]}
($VIFLINE ist die besagte Zeile) ganz gut in den neueren BASH-Versionen. Nur bei alten BASH-Versionen, wie sie zB auch noch in Debian Sarge im Einsatz sind, klappt das nicht. Ich brauch also einen anderen Weg, an den Namen des IF zu kommen. Wichtig ist dabei, das ich micht nicht auf die Reihenfolge der Parameter verlassen kann.

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:52
by Roger Wilco

Code: Select all

$ echo "vif = [ 'bridge=xenbr0,vifname=vif1.0' ]" | sed -e "s/.*vifname=([^']*).*/1/"
vif1.0

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 16:58
by mattiass
Roger Wilco wrote:

Code: Select all

$ echo "vif = [ 'bridge=xenbr0,vifname=vif1.0' ]" | sed -e "s/.*vifname=([^']*).*/1/"
vif1.0
Oder:

Code: Select all

echo $teststring | perl -ne "print $1 if ( /vifname=(.*?)'/ )"

Re: BASH: conditional binary operator expected

Posted: 2006-09-12 17:16
by prodigy7
Roger Wilco wrote:

Code: Select all

$ echo "vif = [ 'bridge=xenbr0,vifname=vif1.0' ]" | sed -e "s/.*vifname=([^']*).*/1/"
vif1.0
Perfekt !!! Danke !!!