Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 19/06/2010, à 14: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, à 15:31

gilbert

Re : Enchainement de commandes et récupérer une variable

salut,

adiranil a écrit :

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 :

adiranil a écrit :

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, à 15: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, à 15:51)

Hors ligne

#4 Le 19/06/2010, à 15: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, à 16: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, à 16: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, à 17: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, à 17:10)


eval, c'est mal.

Hors ligne

#8 Le 19/06/2010, à 18:16

gilbert

Re : Enchainement de commandes et récupérer une variable

Watael a écrit :

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


Simplement moi-même..

Hors ligne

#9 Le 20/06/2010, à 13:53

twocats

Re : Enchainement de commandes et récupérer une variable

gilbert a écrit :

moi j'aurais plutôt dit : NB: #!/bin/bash au lieu de #!/bin/sh afin d'éviter de prendre des habitudes surannées... big_smile

Je plussoie fortement.


La réponse est 42

Hors ligne

#10 Le 20/06/2010, à 14: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. lol

Dernière modification par Watael (Le 20/06/2010, à 14:42)


eval, c'est mal.

Hors ligne

Haut de page ↑