GNU/Linux >> Tutoriales Linux >  >> Linux

si con expresiones regulares en código bash

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

Linux
  1. Bash =~ Regex y Https://regex101.com/?

  2. ¿Cómo monitorear los archivos /etc/shadow y /etc/passwd en busca de cambios con Auditd?

  3. Instalar binarios en /bin, /sbin, /usr/bin y /usr/sbin, interacciones con --prefix y DESTDIR

  4. ¿Cuál es la conexión entre los directorios /etc/init.d y /etc/rcX.d en Linux?

  5. Ordenar con separador de campo

La forma correcta de editar archivos /etc/passwd y /etc/group en Linux

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

Bash Prompt con el último código de salida

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

/etc/passwd muestra al usuario en un grupo, pero /etc/group no

BASH:compruebe /etc/shadow si la contraseña de usuario está bloqueada