
Ich muss zwei Variablen mit IPv6 vergleichen, also gibt es sowohl Zeichenfolgen als auch Ganzzahlen.
Ich habe es wie folgt versucht:
if [[ "$ipvsrc" -eq "$ipvdst" ]];
then echo -e "Value OK"; fi
Die Fehlerausgabe war:
line 7: [[: 2a00: value too great for base (error token is "2a00")
Dann:
if [ $ipvsrc -eq $ipvdst];
then echo -e "Value OK"; fi
Die Fehlerausgabe war:
line 7: [: 2a00:0da9:000a:2010:1fc:0:2174:1951: integer expression expected
Dann:
if [[ "$ipvsrc" == "$ipvdst" ]];
then echo -e "Value OK";
fi
Ausgabe: keine
Variablen werden wie folgt gesetzt:
ipvsrc=$(cat config_src | grep ipvsrc |grep -v localhost | cut -d '=' -f2);
ipvdst=$(cat config_dst | grep -i ipvdst | cut -d '=' -f2);
Irgendwelche Tipps, meine Herren, wie man das gewünschte Ergebnis erzielt? Vielen Dank, Prost!
Antwort1
Ihr letztes Beispiel ist korrekt (vorausgesetzt, Sie verwenden eine Shell wie bash
oder ksh93
die versteht [[ ... ]]
, aber anscheinend ist das der Fall):
if [[ "$ipvsrc" == "$ipvdst" ]]; then
echo "Value OK";
fi
Die beiden Variablen, die Sie vergleichen, enthalten Zeichenfolgen. Daher ==
ist es richtig, sie in Anführungszeichen zu setzen und zu verwenden.
Der Grund, warum Sie keine Ausgabe erhalten, liegt wahrscheinlich einfach darin, dass der Vergleich falsch ausgewertet wird, d. h. dass die beiden Zeichenfolgen nicht identisch sind.
Leider kenne ich den Inhalt von nicht config_{src,dst}
und kann daher nicht sagen, welche Werte die beiden Variablen wahrscheinlich haben oder ob sie gleich oder unterschiedlich sein sollten.