GNU/Linux >> Tutoriels Linux >  >> Linux

si avec regex dans le code bash

Beaucoup plus simple de vérifier directement la chaîne de publication

if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...

Le grep correspondances de commande par expression régulière. Le [56] l'atome correspond à 5 ou 6 , permettant au modèle de correspondre sur 7.5 ou 7.6 . Depuis . correspond à n'importe quel caractère Je l'ai échappé avec une barre oblique inverse pour qu'il corresponde à un point littéral. L'espace de fin garantit qu'aucun autre caractère ne suit la chaîne de version correspondante.


Vous pouvez le faire avec bash correspond à la chaîne intégrée. Notez que ceci utilise des modèles glob (joker), pas des expressions régulières.

if [[ $(cat /etc/redhat-release  | awk '{print $7}') == 7.[56] ]]

Soit, on élimine l'UUoC :

if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]

ou...

if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]

ou encore (merci à @kojiro)...

if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]

(Notez que des caractères génériques au début et à la fin sont nécessaires pour faire correspondre la ligne entière. L'espace entre guillemets après le nombre sert à s'assurer qu'il ne correspond pas accidentellement à "7,50".)

Ou si vous voulez vraiment utiliser des expressions régulières, utilisez =~ et passez à la syntaxe RE :

if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]

(Notez que la partie entre guillemets sera appariée littéralement, donc . n'a pas besoin d'être échappé ou entre crochets (tant que vous n'activez pas bash31 compatibilité). Et les correspondances RE ne sont pas ancrées par défaut, vous n'avez donc besoin de rien aux extrémités comme dans la dernière.)


awk peut faire tout le travail de cat et [[...]] ici :

if
  </etc/redhat-release awk -v ret=1 '
    $7 ~ /^7\.[56]$/ {ret=0}
    END {exit(ret)}'
then
  ...

Ou juste avec la norme sh syntaxe avec une simple correspondance de modèle générique :

case $(cat /etc/redhat-release) in
  (*'release 7.'[56]' '*) ...;;
  (*) ...;;
esac

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

  2. Installer les binaires dans /bin, /sbin, /usr/bin et /usr/sbin, interactions avec --prefix et DESTDIR

  3. Quelle est la différence entre #!/usr/bin/env bash et #!/usr/bin/bash ?

  4. Invite Bash avec le dernier code de sortie

  5. Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

La bonne façon de modifier les fichiers /etc/passwd et /etc/group sous Linux

Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

Linux - Faire démarrer Daemon avec Linux ?

Comment surveiller les modifications des fichiers /etc/shadow et /etc/passwd avec Auditd ?

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Comment configurer /etc/issues pour afficher l'adresse IP pour eth0