Lancer wget et d'autres commandes dans le shell script
Je suis en train de créer un script shell que je vais télécharger la dernière Atomique gotroot règles à mon serveur, les sortir de leur emballage, les copier dans le bon dossier, etc.,
J'ai lu shell tutoriels et les messages de forum pour la plupart de la journée et de la syntaxe m'échappe pour certains de ces. J'ai couru toutes ces commandes et je sais qu'ils travaillent si je exécuter manuellement.
Je sais que j'ai besoin de développer certains vérification des erreurs, mais je suis juste essayer d'obtenir les commandes à exécuter correctement. Le principal problème pour le moment est la syntaxe des commandes wget, j'ai eu des erreurs sur le manque de points-virgules, division par zéro, non pris en charge les régimes que j'ai essayé divers citant (simple et double) et d'échapper - /" personnages dans diverses combinaisons.
Merci pour toute aide.
Le raw pour la commande wget est
wget --user="jim" --password="xxx-yyy-zzz" "http://updates.atomicorp.com/channels/rules/subscription/VERSION"
#!/bin/sh
update_modsec_rules(){
wget=/usr/bin/wget
tar=/bin/tar
apachectl=/usr/bin/apache2ctl
TXT="Script Run Finished"
WORKING_DIR="/var/asl/updates"
TARGET_DIR="/usr/local/apache/conf/modsec_rules/"
EXISTING_FILES="/var/asl/updates/modsec/*"
EXISTING_ARCH="/var/asl/updates/modsec-*"
WGET_OPTS='--user=jim --password=xxx-yyy-zzz'
URL_BASE="http://updates.atomicorp.com/channels/rules/subscription"
# change to working directory and cleanup any downloaded files and extracted rules in modsec/directory
cd $WORKING_DIR
rm -f $EXISTING_ARCH
rm -f $EXISTING_FILES
rm -f VERSION*
# wget to download VERSION file
$wget ${WGET_OPTS} "${URL_BASE}/VERSION"
# get current MODSEC_VERSION from VERSION file and save as variable
source VERSION
TARGET_DATE=$MODSEC_VERSION
echo $TARGET_DATE
# wget to download current archive
$wget ${WGET_OPTS} "${URL_BASE}/modsec-${TARGET_DATE}.tar.gz"
# extract archive
echo "extracting files . . . "
tar zxvf $WORKING_DIR/modsec-${TARGET_DATE}.tar.gz
echo "copying files . . . "
cp -uv $EXISTING_FILES $TARGET_DIR
echo $TXT
}
update_modsec_rules $@ 2>&1 | tee -a /var/asl/modsec_update.log
RESTART_APACHE="/usr/local/cpanel/scripts/restartsrv httpd"
$RESTART_APACHE
OriginalL'auteur jimlongo | 2013-11-13
Vous devez vous connecter pour publier un commentaire.
Voici quelques lignes directrices à utiliser lors de l'écriture de scripts shell.
rm
. Utilisationfor
des boucles de la place. (Si un nom de fichier commence par un trait d'union?)Je me dois de souligner que, même si votre shell peut être bash, vous avez spécifié
/bin/sh
pour l'exécution de ce script, il n'est PAS un script bash.Voici une réécriture avec certains de vérification d'erreur. Ajouter le sel au goût.
Note que bien que j'ai réécrit cette plus sensibles, il y a certainement encore beaucoup de place pour l'amélioration.
OriginalL'auteur ghoti
Vous avez deux options:
1 - évolution de ce
puis exécutez
wget $WGET1
même à WGET2Ou
2 - encapsulation $WGET1 avec backquotes `.
par exemple:
Cela s'applique à toutes les commandes de votre exécution d'une variable.
Modifications suggérées:
Pro Astuce: Si vous avez besoin de remplacement de chaîne de caractères, à l'aide de ${VAR} est beaucoup mieux pour éliminer toute ambiguïté, par exemple:
$WGET1
et$WGET2
commandes qui renvoie l'erreur "non pris en charge". J'ai vérifié le raw de la commande s'exécute correctement dans la coque lors de la saisie directement, mais dans le script, ça génère cette erreur.Grâce Ghoti! Je n'ai pas encore mis en œuvre le contrôle d'erreur ou d'une boucle pour la suppression du fichier, mais j'ai édité mon script et tout fonctionne maintenant. Avait pour supprimer les guillemets de l'intérieur de la WGET_OPTS et je suis en utilisant le recommande Cpanel commande pour redémarrer le serveur. Pour l'instant je ne vais exécuter le script manuellement, au lieu de partir de cron, jusqu'à ce que je suis convaincu qu'il fonctionne correctement. Merci encore.
OriginalL'auteur Ahmed Jolani