Cherche ressources, tutos sur les fichiers batch

Mammouth du PHP | 19672 Messages

18 nov. 2010, 12:36

Salut tout le monde,
je suis à la recherche de ressources sous forme de tutos ou de didacticiels en ligne sur la construction de fichiers batch sous Linux, le langage, la syntaxe au minimum les bases fondamentales.

Je n'ai pas besoin de créer de grosses commandes compliquées, mais des choses du genre lancer une commande MySQL pour sauvegarder une base de données à partir d'une tâche CRON, ou encore pouvoir le lancer à partir d'une commande exec() en PHP.
Sous Windows je sais le faire, au moins pour mes besoins très limités, mais c'est sous Linux que j'ai besoin de pouvoir le faire.

Toute piste utile sera bienvenue :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 nov. 2010, 13:03

Hello,

Le tuto du site du zéro est assez bien réalisé :
http://www.siteduzero.com/tutoriel-3-96 ... shell.html

Sinon, il y a énormément de ressources là dessus ur internet, le mot clé étant "shell" qui correspond à la ligne de commande sous Linux.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 19672 Messages

18 nov. 2010, 13:06

Excellent, merci bien.

Pour le mot clé « shell », je n'y avais pas pensé et jusqu'à maintenant, le filtrage commençait à devenir ardu tellement il y a de liens hors sujet.
Je devrais arriver à me débrouiller avec ça.

Merci :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

18 nov. 2010, 14:28

Bonjour,

Attention aux différences shell/bash!
J'ai du faire, quelques script pour le boulot...
Et je m'en suis vu à chaque fois!
En fait malgré une grande similitude les deux langages ont des différences sur certaines syntaxes/commandes, notamment sur les tableaux par exemples...
Et je n'ai toujours pas réussit à bien faire la différence entre les deux :)
Donc il faut faire attention à la petite ligne en haut de fichier (j'ai oublié le nom) entre

Code : Tout sélectionner

#!/bin/bash
et

Code : Tout sélectionner

#!/bin/sh
mais c'est vrai qu'il est très difficile de s'y retrouver sur le net :/
j'avais trouvé ça il me semble: http://cyberzoide.developpez.com/unix/shell.php3
Mais je ne retrouve plus un autre liens...

ViPHP
ViPHP | 5462 Messages

18 nov. 2010, 14:31

Donc il faut faire attention à la petite ligne en haut de fichier (j'ai oublié le nom)
le shebang :wink:
http://fr.wikipedia.org/wiki/Shebang

Mammouth du PHP | 19672 Messages

18 nov. 2010, 14:40

Donc il faut faire attention à la petite ligne en haut de fichier (j'ai oublié le nom)
le shebang :wink:
http://fr.wikipedia.org/wiki/Shebang
Intéressant, mais du coup j'ai une question : si je veux faire exécuter une commande MySQL, est-ce que mon fichier devrait commencer par #!/bin/mysql ou quelque chose dans ce goût là ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

18 nov. 2010, 16:07

Pas nécessairement, tu peux tes servir de mysql au sein d'un script bash/sh
Voilà un exemple de ce que j'avais coder, pour faire un export d'une bdd, faire un traitement dessus (passage à l'utf8) et réimporter l'export modifié...:

Code : Tout sélectionner

#!/bin/sh #utf8izer local # changer les chemins ci-dessous CHEMIN="/path" TMP_UTF8="/path_utf8" #Déroulement # -- 1 Remplacement des charset et autres mots-clés dans le contenu de la bdd # (Afin de ne pas troubler le travail fait ensuite dans utf8izer) # (remplace ce qui est lié au charset latin1, et: ',",',\n,\r) echo "Sauvegarde des mots clés" php5 './save_key_words_sql.php' # -- 2 Dump de la bdd dans le repertoire source # (afin qu'il soit traité au même titre que les fichiers sources) echo "Dump Bdd" mysqldump -h localhost -u root --password=xxxx ma_base > "$CHEMIN/bdd.sql" # -- 4 passage à la moulinette d'utf8izer echo "Utf8izer" php5 './utf8izer.php' $CHEMIN $TMP_UTF8 # -- 5 Copie des fichiers transformés dans le répertoire d'origine # (permet d'écraser les fichiers modifié et de conserver les autres) echo "Copie dossier origine" cp -f -r $TMP_UTF8/* $CHEMIN # -- 6 Import de la bdd # (dans une nouvelle table) echo "Import Bdd" mysql --user=root --password=azerty -D cdr_dev1_utf8 < "$TMP_UTF8/bdd.sql" # -- 7 Remise des charset et autres mots-clés dans le contenu de la nouvelle bdd # (retour de ce qui est lié au charset latin1, et: ',",',\n,\r) echo "Restauration des mots clés" php5 './restore_key_words_sql.php' # -- 8 Suppression du dossier temporaire find $TMP_UTF8 -name "*" -exec rm -rf "{}" \;
(attention il y a surement tout pleins de choses à ne pas faire là-dedans :-° )

Après qu'est-ce que tu faire exactement? juste des sauvegardes? ou plus ? (genre optimisation régulière de bdd -OPTIMIZE TABLE...-)

Mammouth du PHP | 19672 Messages

18 nov. 2010, 17:01

En fait ce que je veux faire est assez simple : actuellement, j'ai quelques soucis sur le serveur de test pour faire exécuter la ligne de commande en la mettant directement dans une variables pour lancer un exec() : je pars donc d'une autre idée : créer un fichier .sh avec les bonnes commandes dedans et je vais tenter de faire exécuter ce fichier à la place. Je n'ai pas la main sur la configuration du serveur, et j'ai quelques soucis à obtenir certaines informations, mais je dispose néanmoins des droits sur les fichiers que je peux rendre exécutables si besoin est.

Je suis en train de construire, depuis un certain temps, une application de gestion et je dois mettre en place la base de données. Comme je n'ai pas l'intention de m'amuser à isoler chaque requête pour les faire exécuter individuellement en PHP, je veux faire jouer mon script complet en SQL via une ligne de commande. Ça, c'est la première étape. L'étape suivante consistera à lancer périodiquement un backup des données et effectivement pourquoi pas un OPTIMIZE annuel. Donc je n'ai pas vraiment besoin de créer des fichiers hyper-complexes, mais si courts soient-ils, il reste préférables qu'ils soient rédigés avec une syntaxe correcte ;)

Là je viens de tester en local sous Ubuntu, la phase lancement du fichier .sh fonctionne, il ne reste à en tester le lancement à partir d'un script PHP et dès que ça fonctionnera, je ferai les modifications nécessaires pour reproduire la même chose sur le serveur de test en espérant que j'aurai autre chose des des pages blanches et inertes sans le moindre message, ce qui m'irrite quelque peu, d'autant plus qu'en cas d'erreur il devrait se lever un certain nombre d'exceptions : je ne sais pas quel paramètre a été configuré pour bloquer l'affichage de sortie, mais le display_errors est bien à ON et le error_reporting à 0, donc je devrais tout avoir, mais non, nada, rien, donc je patine un peu à la poursuite de solutions alternatives.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

18 nov. 2010, 17:10

error_reporting à 0
a 0 y'a pu rien, c'est -1 pour tout afficher :wink:

Mammouth du PHP | 19672 Messages

18 nov. 2010, 17:18

Sais plus, j'ai mis E_ALL | E_STRICT et je n,ai pas davantage d'affichage, et malheureusement les logs d'Apache ne m'indiquent rien d'utilisable, bref, j,avance à tâtons pendant que des effluves de moutarde commencent bien gentiment à s'approcher dangereusement de mon appendice nasal :twisted:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

18 nov. 2010, 17:31

Pour l'import et l'export...
L'exemple que je t'ai mis, fonctionnera, si tu as accès à mysql en ligne de commande (et les droits d'improt de fichier) et si l'utilitaire mysqldump est disponible également...
Pour optimize, ça risque d'être un peu plus pénible dans un .sh...
Je sais pas si on peut faire un truc du genre

Code : Tout sélectionner

mysql .... --query="ma requête"

Mammouth du PHP | 19672 Messages

18 nov. 2010, 17:40

Pas grave, pour l'instant, je vais déjà essayer de faire fonctionner l'installation de la base et c'est pas gagné, le fichier n'est visiblement pas exécuté du tout.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1136 Messages

18 nov. 2010, 19:03

Salut ,

juste pour information ,

sh et bash sont tout deux des interpréteurs de commandes appellés plus communément "shell"

sh ( Bourne Shell ) le plus courant sur les Unix.
bash ( Bourne Again Shell ) , le plus courant sous linux , et aussi sous Mac d'ailleurs . Il reprends les fonctionnalités de bases des autres shell ( sh, ksh ou csh )

Il en existe d'autres ,

C-shell ( csh )
Korn Shell ( ksh ) , qui est une evolution du bourne shell
Z-Shell ( zsh ) qui est une evolution du korn shell
... ect ..

ch.

ViPHP
ViPHP | 1136 Messages

18 nov. 2010, 19:11

Pour avoir les retours des process lancés , tu devrai plutôt utiliser proc_open , pour pouvoir rediriger la sortie d'erreur vers la sortie standard .