Script shell (sql)

Script shell (sql) - Shell/Batch - Programmation

Marsh Posté le 10-03-2007 à 13:30:51    

Bonjour,
 
J'ai des difficultés à réaliser un script shell sur 2 points :
 
1)  j'utilise dans le script la commande ftpasswd pour créer sous proftpd des utilisateurs virtuels.
 
Cette commande insérée dans une boucle attend un mot de passe. Comment puis-je automatiser une réponse automatique ?
 

Code :
  1. for ((i=1; i<=10; i++))
  2. do
  3. /usr/sbin/ftpasswd --passwd --name=${domaine}$i --uid=1009 --gid=33 --home=/var/www/htdocs/${domaine}$i --shell=/bin/false
  4. done


 
2) dans ce script, je veux automatiser la création de base de données sous mysql, or j'ai une ligne qui n'est pas bien reconnu en shell alors qu'elle passe en mode sql.
 
CREATE DATABASE et GRANT USAGE fonctionnent mais pas GRANT ALL PRIVILEGES
 

Code :
  1. cat <<EOF | mysql --user=root --password='password'
  2. CREATE DATABASE $DOMAINE;
  3. GRANT USAGE ON * . * TO '${DOMAINE}$i'@'%' IDENTIFIED BY '$password';
  4. GRANT ALL PRIVILEGES ON `cgo01\_%` . * TO '${DOMAINE}$i'@'%' WITH GRANT OPTION ;
  5. EOF


 
Toute aide est la bienvenue
 
Merci

Reply

Marsh Posté le 10-03-2007 à 13:30:51   

Reply

Marsh Posté le 10-03-2007 à 20:29:32    

sneakz a écrit :


1)  j'utilise dans le script la commande ftpasswd pour créer sous proftpd des utilisateurs virtuels.
 
Cette commande insérée dans une boucle attend un mot de passe. Comment puis-je automatiser une réponse automatique ?


Déjà, avant d'insérer ce genre de commande dans une boucle, faut que tu la testes en direct, tu verras mieux la syntaxe. Tu tapes "ftppasswd --<tous les trucs etc>" et tu regardes la syntaxe. Dès que c'est bon, tu la mets dans ta boucle.
Tu peux utiliser la double redirection input => ftppasswd machin chose << _EOT_
mot_de_passe
_EOT_
 
Le problème, c'est que certaines commandes comme "passwd" refusent la redirection input (risque de hack). Si "ftppasswd" est du même type, tu seras marron... sauf si la commande intègre en elle une option te permettant de paramétrer l'input => man
 

sneakz a écrit :

2) dans ce script, je veux automatiser la création de base de données sous mysql, or j'ai une ligne qui n'est pas bien reconnu en shell alors qu'elle passe en mode sql.
 
CREATE DATABASE et GRANT USAGE fonctionnent mais pas GRANT ALL PRIVILEGES
 

Code :
  1. cat <<EOF | mysql --user=root --password='password'
  2. CREATE DATABASE $DOMAINE;
  3. GRANT USAGE ON * . * TO '${DOMAINE}$i'@'%' IDENTIFIED BY '$password';
  4. GRANT ALL PRIVILEGES ON `cgo01\_%` . * TO '${DOMAINE}$i'@'%' WITH GRANT OPTION ;
  5. EOF



 
Fait gaffe aux backquottes (`) après le "ON". Le shell interprète ça comme un sous-appel à une commande. A mon avis, faut les protéger par des backslashes. D'ailleurs je suis étonné que le "GRANT USAGE" passe car les étoiles devraient aussi te poser des soucis...
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 11-03-2007 à 01:43:31    

Merci pour ces conseils.
 
Pour la double redirection, je n'ai pas tout compris mais je vais creuser la question.
 
Pour les backslashes, je vais les ajouter pour tester.
Concernant les *, l'utilisateur est bien créé via le script shell avec son mot de passe associé.
 
Merci encore pour cette intervention.

Reply

Marsh Posté le 11-03-2007 à 17:05:25    

sneakz a écrit :

Pour la double redirection, je n'ai pas tout compris mais je vais creuser la question.


Ben tu t'en sers déjà quand tu fais "cat << EOF" donc t'es sensé connaître et comprendre cette syntaxe non ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 18-03-2007 à 20:11:28    

cat <<'EOF'
 
Ca évite que le shell interprète ce qui se trouve dans le here-document.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed