Première boucle

Première boucle - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-08-2007 à 11:19:38    

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
 
 
 

Reply

Marsh Posté le 29-08-2007 à 11:19:38   

Reply

Marsh Posté le 29-08-2007 à 11:45:59    

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
Reply

Marsh Posté le 29-08-2007 à 11:59:06    

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

Reply

Marsh Posté le 29-08-2007 à 12:05:23    

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

Marsh Posté le 29-08-2007 à 14:48:59    

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

Marsh Posté le 29-08-2007 à 15:12:11    

ç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

Reply

Marsh Posté le 29-08-2007 à 15:22:15    

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

Marsh Posté le 29-08-2007 à 16:34:04    

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
Reply

Marsh Posté le 29-08-2007 à 16:53:34    

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
Reply

Marsh Posté le 29-08-2007 à 16:58:34    

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

Reply

Marsh Posté le 29-08-2007 à 16:58:34   

Reply

Marsh Posté le 29-08-2007 à 17:16:09    

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

Marsh Posté le 29-08-2007 à 20:39:43    

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
Reply

Marsh Posté le 29-08-2007 à 21:25:00    

#!/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
Reply

Marsh Posté le 29-08-2007 à 21:38:37    

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
Reply

Marsh Posté le 30-08-2007 à 10:19:22    

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

Marsh Posté le 30-08-2007 à 11:25:45    

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
Reply

Marsh Posté le 30-08-2007 à 16:16:29    

Ok, merci à tous pour votre aide.

Reply

Marsh Posté le 31-08-2007 à 01:56:05    

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

Reply

Marsh Posté le 31-08-2007 à 14:04:23    

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

Reply

Sujets relatifs:

Leave a Replay

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