Daleko jednodušší, stačí přímo zkontrolovat uvolňovací řetězec
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
grep
příkaz odpovídá regulárnímu výrazu. [56]
atom odpovídá 5
nebo 6
, což umožňuje, aby se vzor shodoval na 7.5
nebo 7.6
. Od .
odpovídá jakémukoli znaku Unikl jsem to zpětným lomítkem, takže to odpovídá doslovné tečce. Mezera na konci zajišťuje, že za řetězcem odpovídající verze nejsou žádné další znaky.
Můžete to udělat pomocí bash
vestavěné porovnávání řetězců. Všimněte si, že to používá vzory glob (zástupné znaky), nikoli regulární výrazy.
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
Nebo odstraníme UUoC:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
nebo...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
nebo dokonce (díky @kojiro)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(Všimněte si, že zástupné znaky na začátku a konci jsou potřeba, aby odpovídaly celému řádku. Mezera v uvozovkách za číslem má zajistit, aby se náhodně neshodovalo s "7,50".)
Nebo pokud opravdu chcete používat regulární výrazy, použijte =~
a přepněte na RE syntaxi:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(Všimněte si, že část v uvozovkách bude uvedena doslovně, takže .
nemusí být escapováno nebo hranaté (pokud nepovolíte bash31
kompatibilita). A shody RE nejsou standardně ukotveny, takže na koncích nic nepotřebujete jako v tom posledním.)
awk
dokáže veškerou práci cat
a [[...]]
zde:
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
Nebo jen se standardním sh
syntaxe s jednoduchou shodou se zástupnými znaky:
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac