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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Première boucle

n°947918
elminio
Posté le 29-08-2007 à 11:19:38  profilanswer
 

Bonjour,
 
je veux vérifié si mon point de montage est ok
donc j'ai décidé de réaliser une petite boucle :
 
if ll /mnt/partage = null
 
then mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
 
else null
 
fi

 
traduction :
 
si ll /mnt/partage est vide  
 
alors monte le partage
 
sinon ne fait rien
 
 
Est-ce correct ?
 
Amicalement,
Elminio
 
 
 

mood
Publicité
Posté le 29-08-2007 à 11:19:38  profilanswer
 

n°947932
franceso
Posté le 29-08-2007 à 11:45:59  profilanswer
 

Non, ce n'est pas correct (je suppose que tu l'avais déjà remarqué en faisant des tests...)

 

Plusieurs problemes :

  • la syntaxe du shell est assez approximative
  • le test "= null" n'existe pas
  • ce n'est pas forcément une bonne idée de tester si le point de montage est vide (par exemple il se pourrait qu'il ne soit pas vide mais que le FS ne soit pas monté dessus). IL faut vérifier directement dans la liste des FS montés si le point de montage qui t'intéresse est monté ou pas. (commande 'mount' ou fichier '/etc/mtab')
 

Un point de départ (en syntaxe type 'bourne shell') :

MOUNTDIRECTORY="/mnt/partage"
if grep -q " $MOUNTDIRECTORY " /etc/mtab
then
   mount ...
fi

 

PS: j'écris ça à la va-vite. C'est juste pour donner un exemple pour que tu t'en inspires. Il faut que tu testes un peu avant de l'utiliser.


Message édité par franceso le 29-08-2007 à 11:47:38

---------------
TriScale innov
n°947936
elminio
Posté le 29-08-2007 à 11:59:06  profilanswer
 

OK merci franceso.
en fait ta commande vérifie si /mnt/partage est dans le fichier mtab.

n°947940
_p1c0_
Posté le 29-08-2007 à 12:05:23  profilanswer
 

elminio a écrit :

OK merci franceso.
en fait ta commande vérifie si /mnt/partage est dans le fichier mtab.


 
oui c'est ca, ce qui signifie que le répertoire est monté...  :)


---------------
-_- http://www.scienceshopping.com -_-
n°948005
elminio
Posté le 29-08-2007 à 14:48:59  profilanswer
 

ça ne fonctionne pas.
 
MOUNTDIRECTORY="/mnt/partage"
if grep -q " $MOUNTDIRECTORY " /etc/mtab
then
   mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi


Message édité par elminio le 29-08-2007 à 14:49:16
n°948010
elminio
Posté le 29-08-2007 à 15:12:11  profilanswer
 

ça fonctionne maintenant mais dans mon mtab j'ai deux fois la ligne
 
mountdirectory="/mnt/partage"
if grep -q " $mountdirectory " /etc/mtab
then
   mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi

n°948024
elminio
Posté le 29-08-2007 à 15:22:15  profilanswer
 

ça ne fonctionne plus
le -q correspond à quoi car dans le man grep je ne l'ai pas compris

Message cité 1 fois
Message édité par elminio le 29-08-2007 à 15:43:35
n°948069
elminio
Posté le 29-08-2007 à 16:34:04  profilanswer
 

quelle commande puis je utilisé ?
 
chemin="grep -q /mnt/partage /etc/mtab"
if $chemin (la je ne trouve pas la bonne commande"différent" ) /mnt/partage
then mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi


Message édité par elminio le 29-08-2007 à 16:34:19
n°948092
franceso
Posté le 29-08-2007 à 16:53:34  profilanswer
 

elminio a écrit :

ça ne fonctionne plus
le -q correspond à quoi car dans le man grep je ne l'ai pas compris


$ man grep
[...]
-q, --quiet, --silent
              Quiet;  do  not write anything to standard output.  Exit immedi-
              ately with zero status if any match is found, even if  an  error
              was detected.  Also see the -s or --no-messages option.
[...]


 
C'est juste pour éviter d'afficher des lignes inutiles à l'écran : tout ce qu'on veut savoir, c'est si la ligne est présente (i.e. si grep renvoie 0 ou autre chose). Le reste, on s'en fout.


Message édité par franceso le 29-08-2007 à 16:53:54

---------------
TriScale innov
n°948096
elminio
Posté le 29-08-2007 à 16:58:34  profilanswer
 

Se script peut-il fonctionner ?
 
chemin="grep -q /mnt/partage /etc/mtab"
mountdirectory="/mnt/partage"
if $chemin -ne $mountdirectory
then mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi

mood
Publicité
Posté le 29-08-2007 à 16:58:34  profilanswer
 

n°948099
_p1c0_
Posté le 29-08-2007 à 17:16:09  profilanswer
 

elminio a écrit :

Se script peut-il fonctionner ?
 
chemin="grep -q /mnt/partage /etc/mtab"
mountdirectory="/mnt/partage"
if $chemin -ne $mountdirectory
then mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi


 
faut relire le post au dessus  ;)  
 
quiet -> n'affiche rien donc chemin contiendra 0 ou 1 selon si le grep a trouvé quelque chose ou non  :)


---------------
-_- http://www.scienceshopping.com -_-
n°948151
franceso
Posté le 29-08-2007 à 20:39:43  profilanswer
 

elminio a écrit :

Se script peut-il fonctionner ?
 
chemin="grep -q /mnt/partage /etc/mtab"
mountdirectory="/mnt/partage"
if $chemin -ne $mountdirectory
then mount -t smbfs //fichiers/dossiers /mnt/partage -o username=*****,password=*****
fi

Il faudrait que tu révises sérieusement tes bases de shell, parce que là j'ai l'impression qu'il te manque des éléments pour comprendre nos réponses.
 
Déjà, si j'ai défini une variable MOUNTDIRECTORY dans mon exemple, c'est justement pour ne pas avoir à dupliquer le chemin du point montage (/mnt/partage). Donc ne t'empresse pas de dupliquer cette information à plein d'endroits différents...
 
Ensuite, un 'if' te branchera ou non suivant la valeur retournée par la commande qui le suit. Si tu veux faire un test (du type -eq ou -ne), la commande à passer est 'test'. Par exemple :

if test "$variable" -eq "toto"
then
 echo ok
fi


 
Sinon, tu mets directement la commande dont tu veux tester le code de retour, et à ce moment là pas besoin d'opérateur:

if grep -q "toto" monfichier
then
  echo ok
fi


 
En ce qui concerne le '-q' du grep, il est uniquement esthétique : c'est juste pour éviter que les informations affichées par grep viennent perturber les messages affichés par ton script. J'ai l'impression que tu n'as pas bien saisi le concept de la valeur de retour de grep. Essaie de faire des tests dans le genre :

$ grep -q "azerty" /etc/passwd; echo $?
$ grep -q "root" /etc/passwd; echo $?


 
Voila, si après tout ça tu n'arrives toujours pas à comprendre comment faire marcher ton script, je pense qu'il n'y aura plus rien d'autre à faire que de te renvoyer lire un manuel de shell.
 
EDIT: un dernier point: en regardant avec attention, tu remarqueras que la commande grep que je t'avais donnée plus haut n'est pas tout à fait équivalente à la tienne : j'ai fait exprès de mettre des espaces autour du chemin recherché. Il serait intéressant que tu essaies de comprendre la différence et l'utilité de cette astuce...


Message édité par franceso le 29-08-2007 à 20:44:15

---------------
TriScale innov
n°948163
kaiska
Posté le 29-08-2007 à 21:25:00  profilanswer
 

#!/bin/bash
 
mountdir="/sys"
 
if ! grep -q "$mountdir" /etc/mtab
then
        echo "mount directory"
fi


 
Ca te va ?

Message cité 1 fois
Message édité par kaiska le 29-08-2007 à 21:25:33
n°948165
franceso
Posté le 29-08-2007 à 21:38:37  profilanswer
 

kaiska a écrit :

#!/bin/bash
 
mountdir="/sys"
 
if ! grep -q "$mountdir" /etc/mtab
then
        echo "mount directory"
fi


 
Ca te va ?

Ah oui, tiens... j'avais oublié le '!' dans ma solution  :sweat:  
 
Sinon, je me répète, mais c'est plus sûr si on met des espaces autour de $mountdir.


---------------
TriScale innov
n°948232
elminio
Posté le 30-08-2007 à 10:19:22  profilanswer
 

ça me va très bien ...
en réponse à franceso :
je me lance dans le script shell donc les bases pour moi s'est ll ls cd rm rmdir mv etc ...
 
un dernier point: en regardant avec attention, tu remarqueras que la commande grep que je t'avais donnée plus haut n'est pas tout à fait équivalente à la tienne : j'ai fait exprès de mettre des espaces autour du chemin recherché. Il serait intéressant que tu essaies de comprendre la différence et l'utilité de cette astuce...
 
En ajoutant des espaces on s'assure qu'il ne prend en compte que /mnt/partage.  
 
J'envisage l'achat du livre Introduction aux scripts shell Edition O'Reilly, est-ce un bon choix ?

Message cité 1 fois
Message édité par elminio le 30-08-2007 à 10:28:57
n°948251
franceso
Posté le 30-08-2007 à 11:25:45  profilanswer
 

elminio a écrit :

je me lance dans le script shell donc les bases pour moi s'est ll ls cd rm rmdir mv etc ...

OK, il ne te manque donc plus que les boucles, tests et autres instructions de contrôle pour parfaire ta formation "de base". Tu auras alors accès à toute la puissance des shell scripts !
 

elminio a écrit :

un dernier point: en regardant avec attention, tu remarqueras que la commande grep que je t'avais donnée plus haut n'est pas tout à fait équivalente à la tienne : j'ai fait exprès de mettre des espaces autour du chemin recherché. Il serait intéressant que tu essaies de comprendre la différence et l'utilité de cette astuce...
 
En ajoutant des espaces on s'assure qu'il ne prend en compte que /mnt/partage.

Exactement :jap:
 

elminio a écrit :

J'envisage l'achat du livre Introduction aux scripts shell Edition O'Reilly, est-ce un bon choix ?

Je connais pas ce bouquin. Perso, j'ai appris les bases du shell avec la machine UNIX: de l'apprentissage à la maîtrise, de L. Léon et F. Millet (il s'agissait d'un de nos manuels de cours à l'ENSTA, mais je crois qu'on peut le trouver dans le commerce). Mais c'est un bouquin qui ne traite pas uniquement et spécifiquement du shell, donc pas forcément adapté à ce que tu cherches.
 
Sinon, de manière générale, les bouquins O'Reilly sont la plupart bien foutus, et la table des matières de celui-ci a l'air de couvrir bien en détails les notions importantes. Donc j'aurais tendance à dire que oui, c'est un bon choix :)


---------------
TriScale innov
n°948366
elminio
Posté le 30-08-2007 à 16:16:29  profilanswer
 

Ok, merci à tous pour votre aide.

n°948480
sputnick
bip...bip...bip...bip...bi...b
Posté le 31-08-2007 à 01:56:05  profilanswer
 

Hum...
 
if; then; else   ç'est PAS une boucle.
 
Une boucle c'est par exemple:
for; do; done
while; do; done

n°948690
matafan
Posté le 31-08-2007 à 14:04:23  profilanswer
 

Techniquement c'est une boucle qu'on exécute entre 0 et 1 fois :D


Aller à :
Ajouter une réponse
 

Sujets relatifs
mail qui boucleshell, boucle for et cat d'un fichier
Bash] Boucle while - export variableproblème avec adobe première élément
Problème avec adobe première élémentadobe premiere sous linux
[BASH] traiter des fichiers dans un boucle for[Bash] Affectation de données dans un tabeau via une boucle
[ Debian ] Ma première install, premières impressions, problèmes et jologin en boucle en mode console
Plus de sujets relatifs à : Première boucle


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