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 31/01/2008, 15h03   #1
Nouveau Membre du Club
 
Stagiaire R&D
Inscription : janvier 2008
Messages : 136
Détails du profil
Informations professionnelles :
Activité : Stagiaire R&D
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2008
Messages : 136
Points : 37
Points : 37
Par défaut Test while avec un tableau

Bonjour.

Voilà j'écris un script shell pour traiter un fichiers texte et j'obtiens le message d'erreur suivant : unary operator expected.

Le test en question est :

Code :
1
2
3
4
while [ ${tableau[$j]} -ne $reference ] || [ $j -lt $k ]
	do
		let j=$j+1
	done
Je pense que le problème est l"utilisation du tableau, sachant que la première case est initialisée à tableau=0 et l'indice j à 0.

Merci d'avance
Shargat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h07   #2
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Citation:
Envoyé par Shargat Voir le message
Bonjour.

Voilà j'écris un script shell pour traiter un fichiers texte et j'obtiens le message d'erreur suivant : unary operator expected.
En fait, il te dit qu'il attend un opérateur unaire !!
Vérifie bien la syntaxe de ton test.
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h11   #3
Nouveau Membre du Club
 
Stagiaire R&D
Inscription : janvier 2008
Messages : 136
Détails du profil
Informations professionnelles :
Activité : Stagiaire R&D
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2008
Messages : 136
Points : 37
Points : 37
La syntaxe est bonne. Enfin je n'y vois aucune erreur pas toi?
Shargat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h39   #4
Membre expérimenté
 
Avatar de Pilru
 
Homme
Dev ASP.NET/jQuery ; Admin ORACLE
Inscription : septembre 2007
Messages : 418
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Dev ASP.NET/jQuery ; Admin ORACLE

Informations forums :
Inscription : septembre 2007
Messages : 418
Points : 531
Points : 531
Code :
while [ ${tableau[$j]} -ne $reference ] || [ $j -lt $k ]
Si le || veut dire OU, alors essaye :

Code :
while [ ${tableau[$j]} -ne $reference -o $j -lt $k ]
Pilru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h57   #5
Nouveau Membre du Club
 
Stagiaire R&D
Inscription : janvier 2008
Messages : 136
Détails du profil
Informations professionnelles :
Activité : Stagiaire R&D
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2008
Messages : 136
Points : 37
Points : 37
Merci je vais tester cela lorsque j'aurai de nouveau accès à un pc sur Linux.
Je vous tiens au courant
Shargat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 17h21   #6
Nouveau Membre du Club
 
Stagiaire R&D
Inscription : janvier 2008
Messages : 136
Détails du profil
Informations professionnelles :
Activité : Stagiaire R&D
Secteur : Communication - Médias

Informations forums :
Inscription : janvier 2008
Messages : 136
Points : 37
Points : 37
Non ça ne fonctionne toujours pas.
Shargat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 00h17   #7
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Code :
while [ ${tableau[$j]} -ne $reference  ||  $j -lt $k ]
Teste celui la !!
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 09h13   #8
Membre expérimenté
 
Avatar de Pilru
 
Homme
Dev ASP.NET/jQuery ; Admin ORACLE
Inscription : septembre 2007
Messages : 418
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Dev ASP.NET/jQuery ; Admin ORACLE

Informations forums :
Inscription : septembre 2007
Messages : 418
Points : 531
Points : 531
Citation:
Envoyé par Shargat Voir le message
Non ça ne fonctionne toujours pas.
Avec le même message d'erreur ?

Ajoute des () pour isoler les expressions :

Code :
while [ (${tableau[$j]} -ne $reference) -o ($j -lt $k) ]
Pilru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 22h54   #9
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
${#tab[*]} : nombre d'occurence de ton tableau

Si ça ne marche pas, insère la commande set -x pour tracer tes instructions


Code :
1
2
3
4
5
6
set -x
while [[ ${tab[$j]} -ne $reference  ||  $j -lt ${#tab[*]} ]]
  do
      j=$j+1
done
set +x
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne 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 18h22.


 
 
 
 
Partenaires

Hébergement Web