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 25/07/2011, 22h54   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 6
Points : 6
Par défaut Problème avec un if

Bonjour ( ou bonsoir).

Je débute dans la création de petit shell.
Je voudrais faire un petit shell qui supprime des fichiers (temporaire) qui se trouve dans un dossier.
Mais je me confronte a un problème.

Code :
1
2
3
4
5
6
7
8
9
10
#!/system/bin/sh
 
dossier=$(ls /temp | wc -l)  #correspond au nombre de dossier et fichier dans le dossier temp
 
if test $dossier -gt 0 ;
then
	echo "Dossier non vide"
else
	echo "Dossier vide"
fi
Voici se que j'ai dans la console
Code :
shell.sh: 10: Syntax error: "fi" unexpected (expecting "then")
Je pense que le problème est dans la condition du if, mais je ne sait pas comment le résoudre.

Merci pour votre aide futur.
Socomfr est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 01h09   #2
Membre confirmé
 
Inscription : juillet 2008
Messages : 145
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 145
Points : 260
Points : 260
C'est quoi comme shell ça?

Parce que ton script comme tu l'as écrit, il marche bien avec bash.
bredelet est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/07/2011, 11h46   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 6
Points : 6
zut j'ai fait une erreur lorsque j'ai copier le code.
Mais le problème n'est pas la.
Socomfr est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 12h18   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Quel système ?
Quelle distrib ?
Quel shell ?
sh est-il un lien symbolique ( ls -l /bin/sh pour le savoir) ?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 26/07/2011, 12h27   #5
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 982
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 982
Points : 6 101
Points : 6 101
Bonjour.

C'est vraiment étrange ... que ce soit en bash, en sh, en dash, ou même en ksh ça devrait fonctionner

T'es sûr que t'aurais pas fait une fausse manip du genre déplacer ton script durant l'édition de celui-ci ?

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 12h58   #6
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 737
Points : 2 737
Citation:
Envoyé par Socomfr Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
#!/system/bin/sh

dossier=$(ls /temp | wc -l)  #correspond au nombre de dossier et fichier dans le dossier temp
  
if test $dossier -gt 0 >>>> ; <<<<
then
	echo "Dossier non vide"
else
	echo "Dossier vide"
fi
un ; qui n'a rien à faire là.
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 13h04   #7
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 982
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 982
Points : 6 101
Points : 6 101
Citation:
Envoyé par JeitEmgie Voir le message
un ; qui n'a rien à faire là.
ça ne devrait pas interférer ...

En effet ça peut s'écrire comme ceci en une ligne :

Code :
if test $dossier -gt 0; then echo "Dossier non vide"; else echo "Dossier vide"; fi
Bon pour un script c'est moche mais c'est pas pour ça que ça ne marche pas ...

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 13h08   #8
Membre confirmé
 
Homme antoine jouan
Étudiant
Inscription : janvier 2010
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme antoine jouan
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2010
Messages : 175
Points : 250
Points : 250
Bonjour,

Code :
1
2
3
4
5
6
7
 
if [$dossier -gt 0]
 then 
echo "Dossier non vide"
 else 
echo "Dossier vide"
fi
essaye ça on ne sait jamais
jouana est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 13h10   #9
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 982
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 982
Points : 6 101
Points : 6 101
@ jouana : Là pour contre faut pas oublier les espaces :

Code :
1
2
3
4
5
6
if [ $dossier -gt 0 ]
then 
    echo "Dossier non vide"
else 
    echo "Dossier vide"
fi
Edit : @ zipe31 : des espaces oui, des double quotes je ne pense pas que ce soit nécessaire ici ... au contraire (on évalue des nombres pas des chaînes avec ces opérateurs là).

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 13h12   #10
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par jouana Voir le message
Code :
1
2
3
4
5
6
7
 
if [$dossier -gt 0]
 then 
echo "Dossier non vide"
 else 
echo "Dossier vide"
fi
Faut des espaces autour des crochets et des quotes doubles avec des simples crochets

Code :
if [ "${dossier}" -gt "0" ]
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 13h30   #11
Membre confirmé
 
Homme antoine jouan
Étudiant
Inscription : janvier 2010
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme antoine jouan
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2010
Messages : 175
Points : 250
Points : 250
au temps pour moi, désolé pour les erreurs de syntaxe.
J'ai posté ce message a la vas vite juste histoire de donner une idée .
Je ferais plus attention par la suite.

Sinon Socomfr tu as fais un man sh et un man [ histoire de voir ou est ton erreur.
jouana est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 14h15   #12
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par ok.Idriss Voir le message
Edit : @ zipe31 : des espaces oui, des double quotes je ne pense pas que ce soit nécessaire ici ... au contraire (on évalue des nombres pas des chaînes avec ces opérateurs là).

Cordialement,
Idriss
C'est clair, mais bon c'est des habitudes prises (ou à prendre) qui ne font pas de mal et évitent bien des tracas bien souvent
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 17h23   #13
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Sauf qu'avec des guillemets tu évalues des chaines de caractères et non des nombres...

Là autant écrire Un test plus cohérent serait :
Code :
1
2
dossier=/tmp
if [ "$(ls -A "$dossier")" ]; then...
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 28/07/2011, 11h24   #14
Invité régulier
 
Inscription : janvier 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 3
Points : 6
Points : 6
Merci de vos réponses.
Le problème est réglé en utilisant [ "$dossier" = "0" ]
Socomfr est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h32.


 
 
 
 
Partenaires

Hébergement Web