J'ai travaillé sur ce petit script et c'est à un point que je peux commencer à l'utiliser.
L'idée est d'automatiser les installations de WordPress via Plesk.
J'ai installé Plesk avec un fichier cronjob pour télécharger le fichier latest.tar.gz de wordpress.com et l'extraire tous les matins. Maintenant, j'essaie d'automatiser la création de bases de données.
J'ai le script bash suivant:
#!/bin/bash/
#To whoever is working on this
#this script simply sets up the DATABASE for the new domain added to the server
#it then logs it, mails the details and clears the log
genpasswd() {
local pass=`cat /dev/urandom | tr -cd "[:punct:]" | head -c 2`
echo "$pass"
}
echo $NEW_DOMAIN_NAME >> /usr/games/newdomain.txt
DOMAINNAME=`echo $NEW_DOMAIN_NAME | grep -oE '/[^/]+' | cut -c6- | rev | cut -c4- | rev`
rndChr=$(genpasswd)
CHAR2=${$DOMAINNAME:1:1}
CHAR4=${$DOMAINNAME:3:1}
echo $CHAR2$CHAR4 >> /usr/games/passChar.txt
#get our db stuff
DATABASENAME='exsite_'$DOMAINNAME
DATABASEUSER='exsite_'$DOMAINNAME
DATABASEPASS='[exSite_'$CHAR2$rndChr$CHAR4']'
#create our mail content
CONTENTS="<strong>New MySQL Database created</strong> - <i>see the login details below.<i><p><strong>dbname</strong> $DATABASENAME<br><strong>dbuser</strong> $DATABASEUSER<br><strong>dbpass<strong> $DATABASEPASS"
#log it
echo -e $CONTENTS > /usr/games/dbLog.txt
#mail it
sendMail() {
cat << 'EOF' - /usr/games/dbLog.txt | /usr/sbin/sendmail -t
To: servers@exsite.ie
From: Enterprise
Reply-to: alex@exsite.ie
Subject: [DB Info] for $NEW_DOMAIN_NAME on enterprise.exsite.co
Content-Type: text/html
EOF
printf "STATUS: Mail sent!"
}
if [[ $(sendMail) ]]
then
printf "STATUS: Doing mail thing!"
else
printf "STATUS: MAIL-FAIL!!"
fi
#clear dbLog.txt
exit
Je sais que ce n'est pas le script le plus sophistiqué, mais que c'est un travail en cours et que mon premier script bash est tellement nu avec moi.
Deux problèmes se posent mais je ne comprends pas pourquoi;
Les variables CHAR2 et CHAR4 ne semblent pas capturer les 2ème et 4ème caractères de $ DOMAINNAME - elles sortent simplement vides dans passChat.txt
$ NEW_DOMAIN_NAME va dans newdomain.txt, mais la ligne suivante où j'essaie de renvoyer uniquement le domaine de 2e niveau semble échouer. Cela fonctionnait plus tôt, mais ce n'est pas maintenant. Je n'avais pas changé cette partie cependant.
CHAR2=${DOMAINNAME:1:1}
$NEW_DOMAIN_NAME
ressemble? Je ne peux pas vraiment dire ce que cette ligne grep | cut | rev | ... est supposée faireRéponses:
En supposant que vous souhaitiez obtenir "mydomain", que vous receviez l'un des éléments suivants: "mydomain.com", "www.mondomaine.com", "mail.secure.mydomain.com", ...
La manière appropriée de vérifier les résultats de votre
sendmail
fonction est avec beaucoup moins de syntaxe:if
vérifie le statut de sortie d'une commande. Notez qu’il[[
s’agit d’une commande intégrée bash (qui requiert le dernier argument]]
): à l’invite bash, tapezhelp [[ if
Dans votre
sendmail
fonction, vous utilisezcat << 'EOF'
- qui cite simplement toute la documentation ici. Aucune variable ne sera substituée.Vous semblez vouloir contaténer l'hérédoc, puis stdin, puis un fichier nommé, puis dirigez tout cela vers sendmail. Vous aurez besoin d'un peu plus de syntaxe pour le faire: utilisez les
{ grouping }
accolades pour concaténer les informations, puis dirigez le résultat vers sendmailNotez ici que j'ai utilisé un heredoc avec
<<-
pour permettre l'utilisation d'onglets de tête pour indenter le document. bash est strict et ne concerne que les tabulations, pas d'espaces, alors soyez prudent.Savez-vous que cela
printf
n’ajoute pas de nouvelle ligne à la chaîne sortie? Tous vos messages vont être écrasés ensemble sur une seule ligne.la source
newDB.sh: line 66: warning: here-document at line 46 delimited
by end-of-file (wanted
HEADERS ') `newDB.sh: line 67: syntax error: unexpected end of file
<<-
juste pour ce problème potentiel. Il est difficile de ne garder que des onglets. La configuration de vim utilise des espaces pour l'indentation, donc il faut redoubler d'efforts pour garantir les onglets.