Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/03/2007, 18h48   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 161
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 161
Points : 40
Points : 40
Par défaut Test d'expression avec bash

Bonjour,

Je souhaitrais tester dans une boucle for si ma ligne est un commentaire ou non.

Je pense faire comme ca

Code :
1
2
3
4
5
6
7
8
for var in `cat $fichier`
do
  if [ $var = `echo $var | grep ^#` ] ; then
    echo "COMMENTAIRE"
  else
    echo "PAS COMMENTAIRE"
  fi
done
ca marche mais bash renvoie bash: [: toto : opérateur unaire attendu
pourquoi ??

Merci de votre aide. D'autres solutions peuvent être débatus

Fluxy__
Fluxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 20h56   #2
Membre du Club
 
Inscription : juillet 2006
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 58
Points : 40
Points : 40
Salut,

Code Fluxy :
1
2
3
4
5
6
7
8
for var in `cat $fichier`
do
  if [ $var = `echo $var | grep ^#` ] ; then
    echo "COMMENTAIRE"
  else
    echo "PAS COMMENTAIRE"
  fi
done

C'est bizarre ton $var = `echo $var | grep ^#` là. Il me semble que ça ne marche pas comme ça, en tout cas le '=' me parait douteux.

EDIT :

Test avec ça :

Code :
1
2
3
4
5
6
7
8
for var in `cat $fichier`
do
  if [ "$var" = "`echo $var | grep ^#`" ] ; then
    echo "COMMENTAIRE"
  else
    echo "PAS COMMENTAIRE"
  fi
done
toto019 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2007, 21h24   #3
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Citation:
Envoyé par toto019
en tout cas le '=' me parait douteux
Le '=' est douteux mais tu l'utilises

Il manquait seulement les doubles quotes "$var" et "blabla"

++
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 08h10   #4
Membre du Club
 
Inscription : juillet 2006
Messages : 58
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 58
Points : 40
Points : 40
Citation:
Envoyé par Olivier Regnier
Le '=' est douteux mais tu l'utilises
C'est la veillesse
J'ai confondu avec Perl
toto019 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2007, 10h53   #5
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
le = est parfaitement valide en shell, il ne l'était pas dans la préhistoire.
Code :
1
2
3
4
5
6
7
8
9
 
while read var
do
  if [[ "$var" = "$(echo $var | grep '^#')" ]] ; then
    echo "COMMENTAIRE"
  else
    echo "PAS COMMENTAIRE"
  fi
done < $fichier
ecrit à la mode du XXI ene siècle.
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 07h56   #6
Expert Confirmé Sénior

 
Avatar de Luc Hermitte
 
Inscription : août 2003
Messages : 4 331
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : août 2003
Messages : 4 331
Points : 5 134
Points : 5 134
Sous bash, il y a plus rapide en n'appelant pas de scripts externes.
Code :
1
2
3
if [ "${var/^#/}" != "$var" ] ; then
   echo "commentaire: $var"
fi
Le principe est de virer, par subtitution, le pattern qui t'interresse. S'il est trouvé, alors il disparait du résultat. Et du coup le résultat n'est plus égal à la variable initiale.
C'est certes tordu, mais cela m'avait permis de gagner beaucoup de temps sur un de mes scripts.
__________________
FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média.
Luc Hermitte est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h05.


 
 
 
 
Partenaires

Hébergement Web