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