Transmettre variable de php à bash

Bonjour, j’essai en vain de trouver pourquoi ma variable ne se transmet pas
la table en question ne se charge pas si j’enléve .$_POST[‘table’] a fin du bash, le script fonctionne.

echo$_POST['table']='agenda';

$output=shell_exec('sudo /home/justclo/public_html/SH/sauvgardesSQL.sh 2>&1' .$_POST['table']);  

echo '<pre><b>'.$output.'</pre>';[/code]

[code]export table=$1
ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump  -uLOGIN -pPASS BASE $table" > /home/justclo/backup041118.sql

Simples remarques sur la forme:

… tu espères que tes codes fonctionneront de cette façon ?

Puis on écrit sauvegarde, pas sauvgarde.

:stuck_out_tongue:

Bonjour,
il y a bien un espace. Et oui j’ai espéré que ca fonctionne.
mais malheureusement j’ai pas trouvé grand chose sur le net pour m’aider. c’est juste un probleme de syntaxe ?

Ok, c’est trouvé pour une variable, La syntaxe est trés importante ,

Pour plusieurs variables comme ci-dessous en tout cas ca marche pas comme ca.

avec le sh ci dessous

base=$1 table=$1 ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump -uLOGIN -pPASS $base $table" > /home/justclo/backup041118.sql
C 'est un casse tete

Ouais enfin, “juste” un problème de syntaxe…

Ta 1ère ligne, ça fait un “echo” d’une assignation, pour moi ça renvoit «true»: “oui, j’ai bien réussi à faire l’assignation”.
Donc était-ce vraiment le but de ton [mono]echo[/mono], je suis pas sûr.

Ensuite, tu t’es peut-être un peu perdu en mélangeant les langages, mais l’éxécution de:

… en shell, je crois que ça marchera pas.
Tu ne peux pas passer tes arguments après avoir fait une redirection de flux.


Bon tu as posté entre temps…
Ben là c’est pareil, tu multiplies les [mono]"[/mono] dans une même ligne, et à tous les coups les blocs sont mal découpés.

Ca peut t’aider de découper comme suit:

$commande = “sudo …”;
$resultat = shell_exec($commande);

… et d’utiliser un éditeur avec coloration syntaxique.

J’utilise Jedit, faut que je regarde si y a pas quelques choses pour du bash

Pour une variable ca marche, maintenant.
c’est pour deux que ca pose probleme. il mefaut juste la syntaxe pour y arriver.

la ligne avec les deux est envoyée vers le script sh, mais mysqldump ne charge que l’entete de la base sans contenu. c’est donc les variable qui ne sont pas bien transmise dans ce cas.

Dans plein de langages, une assignation renvoie une référence vers la variable qui vient de recevoir la valeur, afin de pouvoir chaîner les assignations : [mono]x = y = z = 3[/mono] équivaut à [mono]z = 3 ; y = z ; x = y[/mono] ou, de manière plus générale : [mono]op(x = 3)[/mono] équivaut à [mono]x = 3 ; op(x)[/mono]
Le comportement de PHP n’est pas différent, le [mono]echo[/mono] affiche bien [mono]agenda[/mono] après avoir fait l’assignation dans la variable.

Si : [mono]echo >&2 “sortie d’erreur standard”[/mono] ou même [mono]>&2 echo “sortie d’erreur standard”[/mono]

[quote=“casimir”]base=$1 table=$1 ssh -Co CompressionLevel=9 -p 2223 root@monserveur.fr "mysqldump -uLOGIN -pPASS $base $table" > /home/justclo/backup041118.sql[/quote]
Ici, [mono]base[/mono] et [mono]table[/mono] prennent toutes les deux la valeur du premier argument passé à ton script. Ce n’est certainement pas ce que tu veux…

exec("sudo /home/justclo/public_html/facturier2/SH/sauvgardesSQL.sh ".$table." ".$base."" );#!/bin/sh table="$1" # premier argument base="$2" # deuxième argument ...
N’oublie pas qu’en shell, les arguments ne sont pas des variables nommées mais des variables correspondant à la position des arguments sur la ligne de commandes.

Mon beau gourage aura eu le mérite de faire clarifier :wink:

Ben oui c’est idiot que j’ai ps essayer dans ce sens.

base="$1" table="$2"
Super éclaircissement !
Grand MERCI

On peut aussi faire ca sans les quotes ?

base=$1 table=$2
ou ca , j’ai lu des trucs a droite a gauche, c’est du

export base="$1" export table="$2"
dans la doc de bash c’est pas trés clair pour moi. mais les 3 solutions fonctionnent.

Vous vous doutez bien que rien qu’avec ca j’ai énormément de travail du coup.

On continu, puisque j’aurais pu fermer le sujet, mais voila que je veux transmettre une 4 eme variable ou argument dans la ligne de commande

et la recuperer en dans mon fichier .sh et l’utiliser comme condition

$update="1"; exec("sudo /home/justclo/public_html/facturier2/SH/sauvgardesSQL.sh ".$base." ".$table." SQL-".$_POST['nom']."-".$date." ".$update."" );

export base="$1"
export table="$2"
export nom="$3"
export update="$4"

if[ $update="1" ]
then
mysql -hlocalhost -uLOGIN -pPASS $base < /home/justclo/SAUVSQL/$nom.sql
fi

Ca aurait du marcher , c’est assez simple en principe.

PS: le script fonctionne si j’enleve la condition !

  1. mets “$update” entre guillemets
  2. sépare le “=” de ses opérandes par un espace
  3. un espace également entre le if et le crochet.

C 'est bien ca, faudra donc que je fasse attention a tout ca.

if[

et

if [

ou encore

$update=“1”

et

$update = “1”

c’est effectivement pas pareil (les espaces sont tres important).

Merci