Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/05/2010, à 05:13

RayBan

[RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

Bonjour.

Totalement débutant Ubuntu, je souhaiterai savoir comment faire ceci: (EN BASH)

if [ "$VAR" = NULL ]
then

MA COMMANDE 1

else

MA COMMANDE 2

fi

Ou NULL signifie que $VAR= "" ou $VAR = "   " (Peu importe le nombre d'espace contenu dans $VAR)

De plus, je ne suis jamais parvenu à faire cet équivalent:
$var = "un texte tapé par moi, dans mon script"

D'avance merci.

Edit la solution qui fonctionne chez moi :
if [ "${var//[[:blank:]]}" ]; then echo "non blanc" ||  echo "blanc ou vide"; fi

Merci à tous

Dernière modification par RayBan (Le 03/05/2010, à 15:59)

Hors ligne

#2 Le 03/05/2010, à 07:05

francoisp31

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

francois@francois-laptop:~$ echo $t

francois@francois-laptop:~$ $(echo $t | grep -E "\ |^$") ; if [ $? -eq 1 ]; then echo "not ok for ^$ neither ' '" ; else echo "ok : ' ' or ^$ " ; fi
ok : ' ' or ^$ 
francois@francois-laptop:~$ t=" "
francois@francois-laptop:~$ $(echo $t | grep -E "\ |^$") ; if [ $? -eq 1 ]; then echo "not ok for ^$ neither ' '" ; else echo "ok : ' ' or ^$ " ; fi
ok : ' ' or ^$ 
francois@francois-laptop:~$ t='a'
francois@francois-laptop:~$ $(echo $t | grep -E "\ |^$") ; if [ $? -eq 1 ]; then echo "not ok for ^$ neither ' '" ; else echo "ok : ' ' or ^$ " ; fi
not ok for ^$ neither ' '
francois@francois-laptop:~$

voilà pour une comparaison complête
normalement on teste la variable directement mais la c'est plus facile à comprendre pour commencer.

pour de l'information il faut lire le man de bash au niveau des "if" tu verras qu'il y a pleins de comparaisons différentes.

par exemple la comparaison immédiate :

francois@francois-laptop:~$ echo $t | grep -E "\ |^$" && echo "empty or space" || echo "not empty or not only a space"
not empty or not only a space
francois@francois-laptop:~$ t=''
francois@francois-laptop:~$ echo $t | grep -E "\ |^$" && echo "empty or space" || echo "not empty or not only a space"

empty or space
francois@francois-laptop:~$

enfin une syntaxe plus normale quand on veut le if statement complet :

francois@francois-laptop:~$ if $(echo $t | grep -E "\ |^$") ; then echo "empty or space" ; else  echo "not empty or not only a space" ; fi
not empty or not only a space
francois@francois-laptop:~$ t=' '
francois@francois-laptop:~$ if $(echo $t | grep -E "\ |^$") ; then echo "empty or space" ; else  echo "not empty or not only a space" ; fi
empty or space
francois@francois-laptop:~$

Dernière modification par francoisp31 (Le 03/05/2010, à 07:17)


Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.

Hors ligne

#3 Le 03/05/2010, à 12:13

sputnick

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

@RayBan, "" et "   " par exemple, ça n'a rien à voir. Dans le premier cas la variable est nulle, dans le second elle vaut des espaces. Ça semble tordu ton truc comme ça à la base.

@francoisp31, pas besoin de tes substitutions de commandes $( ) ni même du echo.

if grep -qE "\ |^$" <<< "$t"; then echo "empty or space" ; else  echo "not empty or not only a space" ; fi

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

En ligne

#4 Le 03/05/2010, à 12:34

Watael

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

en bash

if [[ -z $var || $var =~ ^\ +$ ]]; then echo ok; else echo KO; fi

Dernière modification par Watael (Le 03/05/2010, à 12:35)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 03/05/2010, à 13:06

sputnick

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

@Watael, oui, et on peux enlever le -z dans ton test, ça marche aussi.
les regexes ERE en bash c'est pas très portable suivant la version de bash installée.
Ce pourquoi, je préfère un grep pour faire des regexes.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

En ligne

#6 Le 03/05/2010, à 13:45

francoisp31

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

sputnick a écrit :

@RayBan, "" et "   " par exemple, ça n'a rien à voir. Dans le premier cas la variable est nulle, dans le second elle vaut des espaces. Ça semble tordu ton truc comme ça à la base.

@francoisp31, pas besoin de tes substitutions de commandes $( ) ni même du echo.

if grep -qE "\ |^$" <<< "$t"; then echo "empty or space" ; else  echo "not empty or not only a space" ; fi

interopérabilité du code... wink avec d'autres unix utilsant des bash pas tjrs identiques désolé l'habitude de se protéger..

Dernière modification par francoisp31 (Le 03/05/2010, à 13:46)


Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.

Hors ligne

#7 Le 03/05/2010, à 14:36

RayBan

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

Merci Messieurs.

Tout ceci est un peu trouble pour moi, mais cela devrai le faire.
Pour le man, j'avoue ne pas comprendre grands chose en général.

Merci à vous.

Dernière modification par RayBan (Le 03/05/2010, à 14:40)

Hors ligne

#8 Le 03/05/2010, à 14:42

johndo

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

Bonjour,

Ou encore :

if [ "${var// }" ]; then echo "non blanc" else  echo "blanc ou vide"; fi

EDIT : Ensuite, si tu inclus également les tabulations, tu peux utiliser la classe "blank" :

if [ "${var//[[:blank:]]}" ]; then echo "non blanc" else  echo "blanc ou vide"; fi

Dernière modification par johndo (Le 04/05/2010, à 08:15)

Hors ligne

#9 Le 03/05/2010, à 14:57

RayBan

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

Merci Jonhdo.

Hors ligne

#10 Le 03/05/2010, à 14:57

credenhill

Re : [RESOLU]Vérifier qu'une variable ne contient pas que des espaces ?

hello
ou alors

$ x="" ; awk '!NF{exit(1)}' <<<"$x" || echo vide
vide
$ x="  " ; awk '!NF{exit(1)}' <<<"$x" || echo vide
vide
$ x=" a  " ; awk '!NF{exit(1)}' <<<"$x" || echo vide
$

Hors ligne