Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
variable entiere dans bash
Envoyé par: appolo

Bonjour,

Je cherche à comparer deux années (en bash). Je recupère la première à partir d'un ls :

n_annee=`ls -lc --full-time $i | awk '{print $10}'`

la deuxième est le résultat de la lecture d'un fichier :

annee=`cat temporaire | awk '{print $4}'`

Mon problème est que je n'arrive pas à comparer ces deux valeurs :
if (let "$annee<$n_annee"); then echo "OK"; fi
me donne l'erreur suivante :
bash: let: 2004
2004<2004: syntax error in expression (error token is "2004<2004")

J'ai l'impression que la variable $annee est considérée comme une chaine de caractère. J'ai essayé d'utiliser la commande declare -i sans plus de succés.

Que fais-je mal ?
Merci d'avance

Poste le Monday 16 February 2004 15:16:13
Répondre     Citer    
Re: variable entiere dans bash
Envoyé par: deb


bonjour,

il me semble que, pour le bash, la comparaison entre 2 entiers se fait
comme suit :

if [ $annee -lt $n_annee ] ; then ...

donc remplacer les parentheses par des crochets
-lt signifie strictement inferieur (cf man bash)

en esperant que ca t'aide

Poste le Monday 16 February 2004 16:43:32
Répondre     Citer    
Re: variable entiere dans bash
Envoyé par: appolo

Ca m'aide (je n'avais jamais compris comment se servir de l'outil [ ] )
Cela dit j'ai toujours le meme type de problème :

n_annee=`ls -lc --full-time $i | awk '{print $10}'`
annee=2004
if [ $annee -lt $n_annee ]; then echo "OK"; fi

alors ça fonctionne.
Mais si je recupère annee par

annee=`cat temporaire | awk '{print $4}'`

j'ai bien annee qui vaut 2004, mais je pense que annee est considéré comme une chaine de caractère car cette fois ci :
if [ $annee -lt $n_annee ]; then echo "OK"; fi
donne :
[: 2004: unary operator expected

Des idées ?

Poste le Monday 16 February 2004 17:15:12
Répondre     Citer    
Re: variable entiere dans bash
Envoyé par: alveric

Et en plaçant le test entre doubles crochets?
if [[ $annee -lt $n_annee ]]; then echo "OK"; fi

Poste le Monday 16 February 2004 21:41:25
Répondre     Citer    
Re: variable entiere dans bash
Envoyé par: Eric92

Pour ce genre de comparaison entre entiers, on peut écrire plus simplement (pas besoin des $ mais bien doubler les parenthèses) :
if (( annee < n_annee )); then echo "OK"; fi

Pour cela vérifier que les variables *annee contiennent seulement des chiffres, sans caractère parasite :
echo "$annee, $n_annee"

Poste le Tuesday 17 February 2004 02:30:43
Répondre     Citer    
Re: variable entiere dans bash
Envoyé par: appolo

Parfait !
Les [[ ]] avec $ comme les (( )) sans $ fonctionnent.
Merci

Poste le Tuesday 17 February 2004 09:11:33
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
variable entiere dans bash
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons