Molto più semplice controllare direttamente la stringa di rilascio
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
Il grep
il comando corrisponde per espressione regolare. Il [56]
atom corrisponde a 5
o 6
, consentendo la corrispondenza del modello su 7.5
o 7.6
. Dal .
corrisponde a qualsiasi carattere L'ho sfuggito con una barra rovesciata in modo che corrisponda a un punto letterale. Lo spazio finale assicura che non ci siano altri caratteri dopo la stringa della versione corrispondente.
Puoi farlo con bash
Corrispondenza di stringhe incorporata di . Tieni presente che questo utilizza modelli glob (caratteri jolly), non espressioni regolari.
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
Oppure, di eliminiamo l'UUoC:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
oppure...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
o addirittura (grazie a @kojiro)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(Nota che i caratteri jolly all'inizio e alla fine sono necessari per far corrispondere l'intera riga. Lo spazio tra virgolette dopo il numero serve per assicurarsi che non corrisponda accidentalmente a "7.50".)
Oppure, se vuoi davvero usare le espressioni regolari, usa =~
e passa alla sintassi RE:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(Notare che la parte tra virgolette verrà abbinata letteralmente, quindi .
non ha bisogno di caratteri di escape o tra parentesi (a patto che non abiliti bash31
Compatibilità). E le corrispondenze RE non sono ancorate per impostazione predefinita, quindi non hai bisogno di nulla alle estremità come nell'ultima.)
awk
può fare tutto il lavoro di cat
e [[...]]
qui:
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
O semplicemente con lo standard sh
sintassi con semplice corrispondenza del modello di caratteri jolly:
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac