Viel einfacher, den Release-String direkt zu prüfen
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
Der grep
Befehl passt nach regulärem Ausdruck. Die [56]
Atom stimmt mit 5
überein oder 6
, sodass das Muster auf 7.5
passt oder 7.6
. Seit .
entspricht beliebigem Zeichen Ich habe es mit einem umgekehrten Schrägstrich maskiert, damit es mit einem wörtlichen Punkt übereinstimmt. Das abschließende Leerzeichen stellt sicher, dass keine weiteren Zeichen auf die übereinstimmende Versionszeichenfolge folgen.
Sie können dies mit bash
tun 's eingebauter Zeichenfolgenabgleich. Beachten Sie, dass hier Glob-Muster (Platzhalter) und keine regulären Ausdrücke verwendet werden.
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
Oder wir eliminieren das UUoC:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
oder...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
oder sogar (dank @kojiro)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(Beachten Sie, dass Platzhalter am Anfang und am Ende benötigt werden, damit es mit der gesamten Zeile übereinstimmt. Das Leerzeichen in Anführungszeichen nach der Zahl soll sicherstellen, dass es nicht versehentlich mit "7.50" übereinstimmt.)
Oder wenn Sie wirklich reguläre Ausdrücke verwenden möchten, verwenden Sie =~
und wechseln Sie zur RE-Syntax:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(Beachten Sie, dass der Teil in Anführungszeichen wörtlich abgeglichen wird, also .
muss nicht maskiert oder geklammert werden (solange Sie bash31
nicht aktivieren Kompatibilität). Und RE-Matches sind standardmäßig nicht verankert, also brauchen Sie nichts an den Enden wie im letzten.)
awk
kann die ganze Arbeit von cat
erledigen und [[...]]
hier:
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
Oder einfach mit Standard sh
Syntax mit einfachem Wildcard-Musterabgleich:
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac