Ecrire script bash dans un script bash

Résolu/Fermé
Sam - 3 janv. 2013 à 18:10
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 4 janv. 2013 à 09:19
Bonjour,

Je voudrais écrire un script bash qui prend plusieurs arguments et qui à partir de ces arguments me génère un autre script bash (C'est tordu mais j'utilise cette méthode car j'appelle crontab à la fin de mon script afin de exécuter plusieurs fois à une intervalle prédéfini le script généré dans un fichier) .

Mon problème, c'est que j'utilise

echo "mon script ... " > nom_du_script.sh

pour générer le script et que lorsque je "compile" il me remet à la figure le script généré avec à la fin un "not found".

Si quelqu'un connaît ce problème ?
A voir également:

8 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 18:16
Salut,

et que lorsque je "compile"
Euh... c'est à dire ?
Pour rappel les scripts bash sont dits interprétés et non compilés ;-\

Peut être qu'en voyant ton script on verrait mieux où ça cloche, non ?
0
Salut,

Oui, c'est pour cela que j'ai mis "compiler" entre guillemets.
Je voulais effectivement dire lorsque je l'interprète.

Pour le code, je peux mettre son corps :
if test $# -ne 3
then 
  echo "Il me faut 3 arguments! "
else
  echo " #!/bin/sh ... Long script bash qui interroge une base mysql en utilisant deux des trois arguments et qui parse des fichiers ..." > chemin/fichier/nom_fichier.sh

  crontab -e */$3 * * * * chemin/fichier/nom_fichier.sh >/dev/null 2>&1; 
fi
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 18:33
Long script bash qui interroge une base mysql en utilisant deux des trois arguments et qui parse des fichiers
Est-ce que chacune des commandes contenues dans cet "echo" marche si elles sont lancées individuellement ?
0
Oui, elles marchent toutes mais j'ai tout de même oublier de préciser que lorsque j'interprète mon code et qu'il me balance le script généré avec l'erreur "not found", le script généré met un blanc lorsque je réutilise une variable déclaré ce code. Exemple :
echo "#!/bin/sh 
test = 'mysql ...'
test2 = $test  + 1 // ici a la place de $test il me met un blanc alors que lorsque je l'exécute en dehors de ce script, j'obtient le bon résultat. 
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 18:43
Euh... en bash, il ne faut pas d'espace autour du signe égale quand on déclare une variable !

test=$(mysql ...)


PS. La syntaxe avec les quotes inverses (le code html de CCM ne permet pas leur affichage) n'est plus de mise et est remplacée par : $(commande)
0
C'est tordu
Je vais dire comme toi: c'est tordu (mais je pense à autre chose). :(
mais j'utilise cette méthode car j'appelle crontab à la fin de mon script afin de exécuter plusieurs fois à une intervalle prédéfini le script généré dans un fichier
Quel rapport entre la méthode et crontab ?

un script doit être exécutable, pour être interprété par le noyau.

l'option -e de crontab ne fait pas ce que tu crois, regarde la page man!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci Zipe31, je vais essayer de remplacer tous cela pour voir si cela change quelque chose.
Pour les espaces, je n'en ai pas mis, c'etait juste pour illustrer mon problème.

Pour qqchquicommenceparQ, il me semblait que crontab -e permet d'éditer la table cron ?

Je dit 'j'utilise cette méthode" car je ne voit pas comment demander à crontab d'exécuter le script dans lequel il est appelé.
Il me semble que cela pourrait causé quelques petits problèmes.
C'est pour cela que je crée un script dans ce script pour pouvoir ensuite appeler le script généré avec crontab.
Si j'ai fait une erreur la dessus, ton aide est la bienvenue ! :)
0
Pour Zipe31, j'ai remplacer toutes les quotes inverses mais maintenant il me met :
Syntax error: "(" unexpected (expecting ")") 

J'ai vérifié et a priori, je n'ai aucun problème de parenthèses !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 19:13
Quel shell ? Quel système ?
0
Le shell : /bin/bash (c'est bien la commande echo $SHELL pour savoir, j'ai un doute)
Et le système : Debian (Dernière version)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 19:23
Alors pourquoi tu mets "#!/bin/sh" dans tes scripts ?

Quel système ?
Vers où pointe /bin/sh ? (readlink -f /bin/sh)
0
Pour le "#!bin/sh" je ne pensais pas que c'étais gênant (je n'ai jamais eu de problème avec en tout cas).
Sinon /bin/sh pointe sur /bin/dash
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
3 janv. 2013 à 19:43
Sinon /bin/sh pointe sur /bin/dash

D'où les erreurs avec "$(commande)" ;-((
0
Non je ne pense pas.
Dash est le shell par défaut sous debian et ubuntu.
0
Utilisateur anonyme
3 janv. 2013 à 21:52
Je dit 'j'utilise cette méthode" car je ne voit pas comment demander à crontab d'exécuter le script dans lequel il est appelé.
[...]
C'est pour cela que je crée un script dans ce script pour pouvoir ensuite appeler le script généré avec crontab.


Je ne vois pas en quoi mettre un tourne vis au cul d'un autre tournevis va faire en sorte qu'il tourne plus régulièrement.
Cette "logique" m'échappe.
0
Bon j'ai résolu mon problème.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
4 janv. 2013 à 09:19
Happy for you, mais comment ???
0