Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
897 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  while [ -d "$nom_rep" != 0 ] ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

while [ -d "$nom_rep" != 0 ] ?

n°2229651
Thaybow7
Posté le 31-05-2014 à 23:22:16  profilanswer
 

Bonjour!
Tout est dans le titre plus ou moins.
 
Je voulais savoir si sous shell on pouvait faire :
 
while [ -d "$nom_rep" != 0 ] do
 
comme écriture pour dire " Tant que le test sur le nom de répertoire ramène 1 (ou n'est pas 0 ) faire"
 
Si cela est incorrect, quel est la bonne écriture?
 
Merci d'avance.  
Soyez indulgent, je débute depuis aujourd'hui...

mood
Publicité
Posté le 31-05-2014 à 23:22:16  profilanswer
 

n°2229658
par l'anne​au de l'ia
word master
Posté le 01-06-2014 à 08:46:31  profilanswer
 

ça va dépendre du shell.

n°2229660
Profil sup​primé
Posté le 01-06-2014 à 10:28:05  answer
 

salut
 
non, la structure conditionnelle va "analyser" le code de retour de la commande `test`
 
donc, il suffit de faire :

Code :
  1. until test -d "$repertoire"; do : ; done

qui est équivalent à

Code :
  1. while ! test -d ...

n°2229661
Thaybow7
Posté le 01-06-2014 à 11:26:12  profilanswer
 

Ok super, merci pour votre aide.


Message édité par Thaybow7 le 01-06-2014 à 11:32:11
n°2229664
Thaybow7
Posté le 01-06-2014 à 12:45:05  profilanswer
 

Par contre, je reçois 2 erreurs
Identifiant non valable pour num  
et erreur de syntaxe pres du symbole inattendu done
 
Vous sauriez m'aider?

Code :
  1. # Invite à l'utilisateur
  2. echo "Appuyer sur le chiffre correspondant : "
  3. read num
  4. # Option 1
  5. if [ "$num" = 1 ]; then
  6. echo "Entrez le nom du répertoire que vous voulez sauvegarder : "
  7. read nom_rep
  8. # Test de l'existence du répertoire
  9. while [! test -d $nom_rep] ;
  10. do
  11.  echo "Le répertoire n'existe pas"
  12.  echo "Entrez un nom de repertoire correct / Appuyer sur q pour quitter "
  13.  read nom_rep
  14.  if [ "$nom_rep" = "q" ] || [ "$nom_rep" = "Q" ]; then
  15.   exit
  16.  fi
  17. done
  18. # Demande du répertoire de destination
  19. echo "Entrez le chemin ou placer le backup"
  20. read chemin_rep
  21. # Test de l'existence du chemin de destination
  22. while [! test -d $chemin_rep] ;
  23. do
  24.  echo "Le chemin que vous avez renseigné n'existe pas"
  25.  echo "Entrez un nom de repertoire correct / Appuyer sur q pour quitter : "
  26.  read chemin_rep
  27.  if [ "$chemin_rep" = "q" ] || [ "$chemin_rep" = "Q" ]; then
  28.   exit
  29.  fi
  30. done
  31. # Arrivé ici, les deux repertoires existent
  32. echo "Quel nom voulez-vous donner à l'archive? "
  33. read nom_arch
  34. echo "Sauvegarde de $nom_rep vers $chemin_rep/$nom_arch"
  35. tar czf $chemin_rep/$nom_arch $nom_rep
  36. fi

n°2229666
Thaybow7
Posté le 01-06-2014 à 13:01:45  profilanswer
 

Il faut que je place un $ avant le read? :sweat:

n°2229671
Profil sup​primé
Posté le 01-06-2014 à 17:23:17  answer
 

:non:

Code :
  1. while [! test -d $nom_rep]

c'est, ou [, ou test, mais pas les deux.
et il faut des espaces entre les commandes et leurs arguments, et entre les arguments.
 

Code :
  1. until test -d "$nom_rep"

avec des guillemets !


Message édité par Profil supprimé le 01-06-2014 à 17:24:09
n°2229784
Thaybow7
Posté le 02-06-2014 à 19:58:15  profilanswer
 

Merci déjà.
Pour ma question, faut-il rajouter un $ avant le read?
Sinon le reste du code il est correct (j'ai supprimé les ";" entre temps )


Message édité par Thaybow7 le 02-06-2014 à 20:03:39
n°2229785
Profil sup​primé
Posté le 02-06-2014 à 20:02:40  answer
 

les points-virgules sont facultatifs en fin de ligne,
mais ils sont indispensables pour séparer les commandes ou leurs différentes composantes.

n°2229786
Thaybow7
Posté le 02-06-2014 à 20:05:15  profilanswer
 

Tu peux me donner un exemple, si c'est pas trop demandé? Car je vois pas encore bien ou je devrais en placer


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  while [ -d "$nom_rep" != 0 ] ?

 

Sujets relatifs
While en Cmacro trop lente - double boucle do while
Affichage WHILE[C=débutant] Boucle While
[ASP] Do While sur une requête erronéeA supprimer : doublons
Boucle while en erreurdifférence entre for(;;) et while(true)
Boucle while dans boucle for[VBS] boucle do while not pour tester le mappage d'un lecteur
Plus de sujets relatifs à : while [ -d "$nom_rep" != 0 ] ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR