GNU/Linux >> Linux Esercitazione >  >> Linux

if con regex nel codice bash

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

Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Bash =~ Regex e HTTPS://regex101.com/?

  3. Linux:avvia Daemon con Linux?

  4. Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

  5. Schema Regex per modificare il file /etc/sudoers

Il modo giusto per modificare i file /etc/passwd e /etc/group in Linux

Come monitorare i file /etc/shadow e /etc/passwd per le modifiche con Auditd?

CentOS / RHEL:come recuperare dal file /etc/passwd cancellato

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Qual è la connessione tra le directory /etc/init.d e /etc/rcX.d in Linux?

BASH:controllare in /etc/shadow se la password dell'utente è bloccata