Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 10/07/2008, 07h45   #1 (permalink)
Membre du Club
 
Date d'inscription: février 2005
Messages: 109
Par défaut Script Shell et update BD depuis fichier txt

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
pcsystemd est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/07/2008, 22h22   #2 (permalink)
Membre actif
 
Date d'inscription: décembre 2006
Messages: 196
Par défaut

Bonsoir,

En supposant que tu utilise Mysql.

Je ferais comme cela :
  1. Lire le fichier ligne à ligne (en virant la première)
  2. Pour chaque ligne créer ma requête (update....) dans un fichier toto.sql
  3. l'exécuter par une commande "mysql < toto.sql"
__________________
Winnt
Winnt est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 13h21.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter
Copyright 2000-2008 www.developpez.com - Legal informations