Bonjour,
Je débute dans les script Linux et je cherche a faire une condition IF vérifiant si ma variable $ANNEE contient bien 4 caractères. Si quelqu'un à une idée je suis preneur, merci d'avance!
Cordialement
Version imprimable
Bonjour,
Je débute dans les script Linux et je cherche a faire une condition IF vérifiant si ma variable $ANNEE contient bien 4 caractères. Si quelqu'un à une idée je suis preneur, merci d'avance!
Cordialement
Salut,
tu t'es penché du côté (obscur) des expressions régulières ?
Je viens de justement de commencer une doc à ce sujet mais comme tu le dit si bien ça reste encore "obscur" à mes yeux :)
Très bon le bash, ça permet de faire des choses compliquées rapidement.
Tu peux aussi le combiner à awk, perl, python... ENJOY!
Exemple:
Code:
1
2
3
4
5
6
7
8
9
10 $ TOTO=ABCD $ echo ${TOTO} ABCD $ echo ${#TOTO} 4 $ TOTO=ABCDE $ echo ${TOTO} ABCDE $ echo ${#TOTO} 5
Merci, j'ai trouvé entre temps, je donne également ma solution au cas où d'autres débutant passerais par là :
Encore merci, je vais continuer à explorer le monde Unix!Code:
1
2
3
4
5
6
7 if [ ${#ANNEE} -ge 4 ]; then ... else ... fi
quand echo $? retourne 0 c'est que le test est concluant.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $ regex="[a-z]{4}" $ echo $var 1 $ [[ $var =~ ^${regex}$ ]] $ echo $? 1 $ var=azer $ [[ $var =~ ^${regex}$ ]] $ echo $? 0 $ var=azer4 $ [[ $var =~ ^${regex}$ ]] $ echo $? 1
c'est faux, si ta variable contient ANNEE="COINCOIN" le test passe, pourtant ça n'est pas une année, qui plus est tu vérifies que l'année fait au moins 4 caractères, alors qu'on peut facilement supposer que l'année que tu cherches à valider doit comporter exactement 4 caractères
la bonne solution consiste à valider à la fois que la variable contient bien 4 caractères ET aussi que chaque caractère est bien un chiffre, c'est donc celle proposée par ggnore plus haut
Code:
1
2
3
4
5 if [[ "$ANNEE" =~ ^[0-9]{4}$ ]]; then ok else pas ok fi
Je suis tout à fait d'accord, la réponse la plus juste est celle de ggnore, la mienne ne faisait que répondre strictement à la question posée sans tenir compte du contexte.
Pour vérifier une date (ici juste l'année, mais on peut étendre), on pourrait la faire valider par la commande date :
Code:
1
2
3
4
5
6 $ TOTO=coincoin $ if [ "$(date -d $TOTO-01-01 '+%Y' 2>/dev/null )" = "$TOTO" ] ; then echo ok ; else echo ko; fi ko $ TOTO=2001 $ if [ "$(date -d $TOTO-01-01 '+%Y' 2>/dev/null )" = "$TOTO" ] ; then echo ok ; else echo ko; fi ok