Première boucle - Codes et scripts - Linux et OS Alternatifs
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 :
Un point de départ (en syntaxe type 'bourne shell') :
MOUNTDIRECTORY="/mnt/partage" |
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.
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.
Marsh Posté le 29-08-2007 à 12:05:23
elminio a écrit : OK merci franceso. |
oui c'est ca, ce qui signifie que le répertoire est monté...
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
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
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
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
Marsh Posté le 29-08-2007 à 16:53:34
elminio a écrit : ça ne fonctionne plus |
$ man grep |
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.
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
Marsh Posté le 29-08-2007 à 17:16:09
elminio a écrit : Se script peut-il fonctionner ? |
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
Marsh Posté le 29-08-2007 à 20:39:43
elminio a écrit : Se script peut-il fonctionner ? |
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" |
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 |
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 $? |
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...
Marsh Posté le 29-08-2007 à 21:25:00
#!/bin/bash |
Ca te va ?
Marsh Posté le 29-08-2007 à 21:38:37
kaiska a écrit :
|
Ah oui, tiens... j'avais oublié le '!' dans ma solution
Sinon, je me répète, mais c'est plus sûr si on met des espaces autour de $mountdir.
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 ?
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... |
Exactement
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
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
Marsh Posté le 31-08-2007 à 14:04:23
Techniquement c'est une boucle qu'on exécute entre 0 et 1 fois
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