#1 Le 19/06/2010, à 13:16
- adiranil
Enchainement de commandes et récupérer une variable
Bonjour.
Je souhaiterai faire un petit script shell qui réaliserait les opérations suivante.
La structure du répertoire
erbs2.gms/dnn
erbs2.gms/dnn2
erbs2.gms/dnn3
etc
dnn* contient les données que compile erbs2.gms
Je dois donc copier le contenu de dnn* dans le sous-répertoire, ensuite m'y placer et compiler. Donc comme ceci :
#!/bin/sh
pwd=$1 && cp -p erbs_dnn ../ && cd ../ &&
/opt/gams/gams erbs2.gms && mv erbs2.lst $1/
L'ennui c'est que ça ne marche pas évidemment. Je voudrais que le résultat de la commande pwd soit mis dans une variable $1 et qu'ensuite la commande mv envoie le fichier compilé erbs2.lst dans $1.
J'espère que c'est clair...
Quelqu'un peut-il m'éclairer ?
=
Hors ligne
#2 Le 19/06/2010, à 14:31
- gilbert
Re : Enchainement de commandes et récupérer une variable
salut,
J'espère que c'est clair...
euh non pas trop... mais bon..
$1 est le contenu du premier argument que tu passes à ton script. Si tu appeles ton script de la sorte :
$ ./script argument1
alors $1 vaudra argument1.
si tu veux que le résultat de la commande pwd soit placé dans une variable :
variable=$(pwd)
après tu as le résultat de la commande pwd dans la variable variable. Tu peux d'ailleurs le vérifier en faisant :
echo $variable
pour reprendre ta demande :
Je dois donc copier le contenu de dnn* dans le sous-répertoire, ensuite m'y placer et compiler.
c'est pas clair du tout du tout... Essaie de reformuler ta demande clairement. Quand tu parles de sous-répertoire, de quel répertoire parles-tu et sous-répertoire par rapport à quel autre répertoire ?
Avec quoi compiles-tu ?
Si tu précises les choses, je peux te corriger ton script...
Simplement moi-même..
Hors ligne
#3 Le 19/06/2010, à 14:49
- adiranil
Re : Enchainement de commandes et récupérer une variable
Grâce à vos explications j'ai pu faire ce que je voulais :
#!/bin/sh
dir=$(pwd)
cp -p erbs_dnn ../ && cd ../ &&
/opt/gams/gams erbs2.gms && rm erbs_dnn && mv erbs2.lst erbs_tee.sol $dir/
Juste une dernière petite précision : le signe && indique bien d'attendre que la commande précédente soit terminée pour lancer la suivante ? Et comment faire pour que la commande /var/opt/gams qui est un utilitaire qu'on installe manuellement soit un $PATH relatif. C'est-à-dire que chez moi il est installé là, mais s'il est installé ailleurs chez un collègue ? Comment faire ?
Merci encore
Dernière modification par adiranil (Le 19/06/2010, à 14:51)
Hors ligne
#4 Le 19/06/2010, à 14:53
- gilbert
Re : Enchainement de commandes et récupérer une variable
commande1 && commande2 exécutera commande2 si et seulement si commande1 réussi (c'est-à-dire retourne 0). de même on peut faire commande1 || commande2 qui exécutera commande2 si et seulement si commande1 échoue (retourne toute autre valeur que 0).
Si tu veux exécuter une commande2 après commande1 indépendamment du code de retour de commande1 tu peux faire commande1; commande2
Ravi d'avoir pu t'aider.
Simplement moi-même..
Hors ligne
#5 Le 19/06/2010, à 15:11
- adiranil
Re : Enchainement de commandes et récupérer une variable
Je vous remercie beaucoup pour ces précisions. Pourriez-vous m'en donner également concernant le problème du PATH de gams ? (j'ai édité après coup mon message et sans doute n'avez-vous pas vu).
Merci
Hors ligne
#6 Le 19/06/2010, à 15:26
- adiranil
Re : Enchainement de commandes et récupérer une variable
Je viens de trouver. Voici la réponse sur le même mode :
#!/bin/sh
dir=$(pwd)
gams=$(which gams)
cp -p erbs_dnn ../ && cd ../ &&
$gams erbs2.gms && rm erbs_dnn && mv erbs2.lst erbs_tee.sol $dir/
Bien entendu cela ne fonctionne que si gams est dans le PATH. Mais en tout cas, ce sera suffisant.
Cordialement !
Hors ligne
#7 Le 19/06/2010, à 16:06
- Watael
Re : Enchainement de commandes et récupérer une variable
#!/bin/sh
if ! gams=`which gams`; then echo "gams n'est pas installé", exit 1; fi
dir=`pwd`
et la suite.
pour info, les noms de variables ne peuvent pas commencer par un nombre.
NB: les ` au lieu de $(), parce que c'est du Bourne Shell (pareil pour le if). na!
Dernière modification par Watael (Le 19/06/2010, à 16:10)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 19/06/2010, à 17:16
- gilbert
Re : Enchainement de commandes et récupérer une variable
NB: les ` au lieu de $(), parce que c'est du Bourne Shell (pareil pour le if). na!
moi j'aurais plutôt dit : NB: #!/bin/bash au lieu de #!/bin/sh afin d'éviter de prendre des habitudes surannées...
Simplement moi-même..
Hors ligne
#9 Le 20/06/2010, à 12:53
- twocats
Re : Enchainement de commandes et récupérer une variable
moi j'aurais plutôt dit : NB: #!/bin/bash au lieu de #!/bin/sh afin d'éviter de prendre des habitudes surannées...
Je plussoie fortement.
La réponse est 42
Hors ligne
#10 Le 20/06/2010, à 13:33
- Watael
Re : Enchainement de commandes et récupérer une variable
vraiment ?
alors, pensez à prévenir la personne qui a écrit les scripts d'installation de Dofus.
Dernière modification par Watael (Le 20/06/2010, à 13:42)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne