Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 01/02/2010, 17h23   #1
Invité de passage
 
Étudiant
Inscription : juin 2008
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 12
Points : 0
Points : 0
Envoyer un message via MSN à tipié
Par défaut [SHELL]extraction de chaîne

Bonjour,
Je vais vous exposer mon problème :
j'ai un serveur central et 5 serveurs secondaires, chaque serveur secondaires contient les données de chaque service qui y sont répertoriés
tous les soirs je veux effectuer une sauvegarde automatisée et sécurisée des données modifiées de chacun des serveurs vers le serveur central ...

Je travaille au préalable sur un script shell qui sera exécuté par une commande cron (de ma crontab)
J'aimerai déjà savoir si je suis sur la bonne voie avec ce script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
date=`date`
destination < ???
 
#teste si le répertoire destination existe
if [ ! -e "$destination" ]; then
echo "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date" 2>&1 <chemin_fichier_log>
#on passe une ligne pour espacer les redirections
echo "" >> <chemin_fichier_log>
exit
fi
 
#la variable rsync recevra le contenu du fichier <fichier_commande>
rsync < <chemin_fichier_commande>
 
echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date" >> <chemin_fichier_log>
#on passe une ligne pour espacer les redirections
echo "" >> <chemin_fichier_log>
Qu'en pensez-vous ?

Maintenant, dans mon script, j'ai souligné les éléments qui me causent du soucis, j'aimerai extraire une chaine de type 'root@<ip_srv_distant1>:<chemin_destination1>' d'un fichier texte pour la mettre dans la variable $destination pour pouvoir détecter après si cette destination existe ou non

Je ne vois pas trop quelle syntaxe utiliser après 'destination <'

Quelqu'un pourrait m'éclaircir les idées à ce propos ?

Merci d'avance

Dernière modification par al1_24 ; 01/02/2010 à 19h00.
tipié est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2010, 19h34   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
Bonjour Tipié,

Voilà ce que j'ai compris de ton code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
 
date=$(date)
destination=/chemin/ta_destination/
log=/chemin/fichier.log
 
#teste si $destination existe, et que c'est un répertoire
#+ tu peux ajouter un test pour vérifier que tu as les droits d'écriture
if [ ! -d "$destination" ]; then
echo -e "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date\n" >> $log
exit
fi
 
commandes=/chemin/fichier_commande
#la variable rsync recevra le contenu du fichier <fichier_commande>
rsync="$(<$commandes)"
 
echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date\n" >> $log
 
#...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2010, 19h40   #3
Membre régulier
 
Christophe LE FLOCH
Inscription : août 2009
Messages : 105
Détails du profil
Informations personnelles :
Nom : Christophe LE FLOCH
Âge : 37

Informations forums :
Inscription : août 2009
Messages : 105
Points : 90
Points : 90
Bonjour,

Est ce que tu peux donner le format du fichier texte et sous quel type de shell tu es? D'une manière générale , tu peux utiliser expr pour extraire une sous chaine.
Si ton fichier ne contient qu'une seule ligne :
Code :
1
2
3
 
fullpath=$(cat monfichier) 
destination=`expr "x${fullpath}" : "x.*:\(.*\)"`
mongolic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2010, 19h51   #4
Invité de passage
 
Étudiant
Inscription : juin 2008
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 12
Points : 0
Points : 0
Envoyer un message via MSN à tipié
j'avoue c'est une meilleure façon de voir les choses
je débute en script shell donc j'utilise ce que je sais

mais c'est vrai que le \n c'est comme en perl j'aurai dû y penser
merci pour les modifications, je verrai ce que ça donne demain
tipié est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2010, 20h23   #5
Invité de passage
 
Étudiant
Inscription : juin 2008
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 12
Points : 0
Points : 0
Envoyer un message via MSN à tipié
merci en tout cas, et au fait c'est le bash que j'utilise d'ou #!/bin/bash
tipié est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2010, 14h00   #6
Invité de passage
 
Étudiant
Inscription : juin 2008
Messages : 12
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 12
Points : 0
Points : 0
Envoyer un message via MSN à tipié
bon j'ai trouvé ce que je cherchais, je met mon script modifié :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
date=`date`
#la variable rsync recevra le contenu du fichier <fichier_commande>
rsync=<chemin/fichier_commande>
#on extrait de la commande rsync : <login@ip_srv_distant>:<chemin_destination>
#on met des ` pour pouvoir éxécuter la commande directement
destination=`sed -n '/^rsync/ s/.*ssh \([^ ]*\) .*/\1/p' <chemin/fichier_commande>`
log=/chemin/fichier.log
 
#teste si le répertoire destination existe 
#la destination sera du type <login@ip_srv_distant>:<chemin_destination>
if [ ! -e "$destination" ]; then
echo -e "ERREUR : La destination $destination n'a pas pu être synchronisée car le répertoire de destination n'a pas été trouvé, le $date\n" >> $log
exit
fi 
 
echo "la sauvegarde de $source jusque $destination a été effectuée avec succès le $date\n" >> <chemin_fichier_log>
avec le scripting sed ça marche du tonnerre
tipié est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2010, 14h33   #7
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
bash ne devrait pas reconnaître des "commandes" telles que :
Code :
rsync=<chemin/fichier_commande>



bash préfère maintenant :à

Dernière modification par N_BaH ; 03/02/2010 à 07h27.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 19h04.


 
 
 
 
Partenaires

Hébergement Web