![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Shell Vos questions sur l'utilisation des commandes shell |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre du Club
![]() Date d'inscription: février 2005
Messages: 109
|
Bonjour,
voila j'ai un crée un script shell qui créait les liens physiques de fichiers pour une mise a jour auto dans les dossiers FTP des utilisateurs. Le processus est le suivant : quand on souhaite mettre a jour le soft du client on renseigne un fichier txt avec la version et le code utilisateur puis on envoi ce fichier txt dans un compte ftp . Mon script va lire se fichier tout les 5 minutes puis il créait les liens physiques dans la boite correspondante au code du client. Puis lorsque le client lance son logiciel ,celui ci se connecte a notre base de données et s'il voit le champs MAJ a 1 il lance la mise a jour. Le souci c'est que pour le moment il est nécessaire de mettre ce champ MAJ a 1 manuellement donc je dois effectué une mise a jours pour 50 utilisateurs différents je dois saisir le champ MAJ a 1 50 fois. Je voudrais que cela ce fasse en automatique. lorsque les liens sont fait que le script mette a jour le champ MAJ a 1 dans la BD. Pour cela il faut qu'il parcours le fichier txt puis lorsqu'il recontre un code utilisateur qu'il fasse un UPDATE . Le contenu du fichier txt est : VER_TO_658 845 265 32 45 Je dois donc avec un sed retirer la premiere ligne qui corrspond a la version puis utiliser le fichier pour qu'un UPDATE du champ MAJ soit fait pour les codes utilisateurs : 845 265 32 45 update maTable set MAJ=1 where code_utilisateur= mon fichier txt Avez vous une idée? Voici la partie de mon script qui créait les liens physiques : Code :
while true
do
case $1 in
-v) VERSION=$2
shift 2
;;
-l) LIST=$2
shift 2
;;
-u) USER=$2
shift 2
;;
-h) usage
exit 0
;;
*)
break
;;
esac
done
#variable prédefini
DATE="`date '+%Y-%m-%d'`"
TMPDIR="/tmp/maj${USER}"
if [ ! -d "${TMPDIR}" ]
then
mkdir -p ${TMPDIR}
fi
HOMEMAJ="${USER}"
REPLIST="liste"
LISTEFICH="liste_maj_${DATE}.lst"
LOGFILE="${TMPDIR}/majlog_${DATE}.log"
MESMAJ="MaJ${USER}"
if [ "${USER}" == "toto" ]
then
REPMAJ="majtoto"
elif [ "${USER}" == "tata" ]
then
REPMAJ="majtata"
elif [ "${USER}" == "titi" ]
then
REPMAJ="majtiti"
fi
if [ ! -d "${HOMEMAJ}/${REPMAJ}/${VERSION}" ]
then
echo "le repertoire ${VERSION} n'existe pas" | mail -s "error ( rdft.sh ) de mise à jour ${MESMAJ} \" ${DATE}\" " tutu@exemple.fr
exit 1
fi
if [ ! -s "${HOMEMAJ}/${REPMAJ}/${REPLIST}/${LIST}" ]
then
echo "le fichier ${LIST} n'existe pas" | mail -s "error ( rdft.sh ) de mise à jour ${MESMAJ} \" ${DATE}\" "tutu@exemple.fr
exit 1
fi
if [ -s "${HOMEMAJ}/${REPMAJ}/${LISTEFICH}" ]
then
rm -f ${HOMEMAJ}/${REPMAJ}/${LISTEFICH}
fi
ls ${HOMEMAJ}/${REPMAJ}/${VERSION}/*.* | awk -F ''${HOMEMAJ}'/'${REPMAJ}'/'${VERSION}'/' '{print $2}' >> ${HOMEMAJ}/${REPMAJ}/${LISTEFICH}
if [ -s "${HOMEMAJ}/${REPMAJ}/${LISTEFICH}" ]
then
if [ -s ${LOGFILE} ]
then
echo "##################" >> ${LOGFILE}
fi
for numag in `cat ${HOMEMAJ}/${REPMAJ}/${REPLIST}/${LIST}`
do
cd ${HOMEMAJ}/$numag;rm -f *.*;cat ${HOMEMAJ}/${REPMAJ}/${LISTEFICH} | xargs -i sh -c 'ln '${HOMEMAJ}'/'${REPMAJ}'/'${VERSION}'/{} {}'
ls ${HOMEMAJ}/$numag/*.* >> ${LOGFILE}
done
exit 0
else
echo "le fichier ${LISTEFICH} n'existe pas" | mail -s " error ( rdft.sh ) de mise à jour ${MESMAJ} \"${DATE}\" " tutu@exemple.fr
exit 1
fi
Dernière modification par pcsystemd ; 10/07/2008 à 08h08 |
|
|
|
|
|
#2 (permalink) |
|
Membre actif
![]() Date d'inscription: décembre 2006
Messages: 196
|
Bonsoir,
En supposant que tu utilise Mysql. Je ferais comme cela :
__________________
Winnt |
|
|
|
![]() |
![]() |
||
Script Shell et update BD depuis fichier txt
|
||
| Outils de la discussion | |
|
|