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

while [ -d "$nom_rep" != 0 ] ? - Shell/Batch - Programmation

Marsh Posté le 31-05-2014 à 23:22:16    

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...

Reply

Marsh Posté le 31-05-2014 à 23:22:16   

Reply

Marsh Posté le 01-06-2014 à 08:46:31    

ça va dépendre du shell.

Reply

Marsh Posté le 01-06-2014 à 10:28:05    

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 ...

Reply

Marsh Posté le 01-06-2014 à 11:26:12    

Ok super, merci pour votre aide.


Message édité par Thaybow7 le 01-06-2014 à 11:32:11
Reply

Marsh Posté le 01-06-2014 à 12:45:05    

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

Reply

Marsh Posté le 01-06-2014 à 13:01:45    

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

Reply

Marsh Posté le 01-06-2014 à 17:23:17    

: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
Reply

Marsh Posté le 02-06-2014 à 19:58:15    

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
Reply

Marsh Posté le 02-06-2014 à 20:02:40    

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

Reply

Marsh Posté le 02-06-2014 à 20:05:15    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed