Mucho más simple simplemente verificar la cadena de liberación directamente
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
El grep
coincidencias de comandos por expresión regular. El [56]
átomo coincide con 5
o 6
, permitiendo que el patrón coincida en 7.5
o 7.6
. Desde .
coincide con cualquier carácter Le he escapado con una barra invertida para que coincida con un punto literal. El espacio final garantiza que no haya otros caracteres después de la cadena de versión coincidente.
Puedes hacer esto con bash
Coincidencia de cadenas incorporada. Tenga en cuenta que esto usa patrones glob (comodines), no expresiones regulares.
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
O bien, eliminamos los UUoC:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
o...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
o incluso (gracias a @kojiro)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(Tenga en cuenta que se necesitan comodines al principio y al final para que coincida con toda la línea. El espacio entre comillas después del número es para asegurarse de que no coincida accidentalmente con "7,50".)
O si realmente quiere usar expresiones regulares, use =~
y cambie a la sintaxis RE:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(Tenga en cuenta que la parte entre comillas coincidirá literalmente, por lo que .
no necesita escaparse ni ponerse entre paréntesis (siempre y cuando no habilite bash31
compatibilidad). Y las coincidencias RE no están ancladas de forma predeterminada, por lo que no necesita nada en los extremos como en el último).
awk
puede hacer todo el trabajo de cat
y [[...]]
aquí:
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
O simplemente con sh
estándar sintaxis con coincidencia de patrón comodín simple:
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac