# Exemple expect
#!/usr/bin/expect -f
# script de récupération de fichier
# Creator : Youenn DUVAL
# Mail : youenn.duval@barbed.fr
# Date : 19/30/2019
# Description :
# Script de récupération de fichier sur un serveur passé en argument(ip) ainsi que le pass
# Exemple ./import.sh 66.66.66.66 motdepasse
# Il crée un dossier import où il recupere les fichiers et un dossier export où il stock des archives en zip.
# Conditions: il doit récuperer 3 fichiers par servers, existant et non vide.
# Il récupere ses deux fichier plus le hostname. Les mets dans dossier Import/ipduserveur puis les compressent
# dans une archivre zip correspondant au nom d'host de la machine (ex: domaine.zip)
# en cas d'erreur il précise dans le nom de l'archive si il manque un fichier ou si il y a au moins un fichier vide
# Amélioration possible, nettoyage du dossier import, débuggage dy systeme de logs
# Déclaration des variables
#-----------------------------------------------------------------
set LOGIN "loginserver"
set PASS [lindex $argv 1]
set SERVER [lindex $argv 0]
set WORK_DIR "/repertoire/de/travail"
set IMPORT_DIR "$WORK_DIR/récup"
set EXPORT_DIR "$WORK_DIR/Export"
set FILE_DIR "/emplacement/des/fichier/a/recuperer"
set FILE_1 "fichier1"
set FILE_2 "ficher2"
set LOG "log_script"
set REPORT "log_report"
# Création du répertoire de réception et d'export
#-----------------------------------------------------------------
exec mkdir -p $IMPORT_DIR/$SERVER
exec mkdir -p $EXPORT_DIR
# Purge Log
#-----------------------------------------------------------------
#exec echo "" > $WORK_DIR/$REPORT
# Récupération du fichier hostname
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:/etc/hostname $IMPORT_DIR/$SERVER
expect {
"*password:*" { send $PASS\r\n; interact }
eof { exit }
}
# Création de la variable hostname
set f [open "$IMPORT_DIR/$SERVER/hostname"]
set HOSTS [read $f]
close $f
set HOSTNAME [lindex [split $HOSTS \n] 0]
# Récupération du premier fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_1 $IMPORT_DIR/$SERVER
expect {
"*password:*" { send $PASS\r\n; interact }
eof { exit }
}
# Recupération du second fichier
#-----------------------------------------------------------------
spawn scp -r -p -o StrictHostKeyChecking=no $LOGIN@$SERVER:$FILE_DIR/$FILE_2 $IMPORT_DIR/$SERVER
expect {
"*password:*" { send $PASS\r\n; interact }
eof { exit }
}
# Les fichiers existe t il ?
#-----------------------------------------------------------------
set NUM_FILE 0
foreach f [glob $IMPORT_DIR/$SERVER/*] {
set NUM_FILE [expr {$NUM_FILE + 1}]
}
# puts "Il y a $NUM_FILE fichiers dans le repertoire $SERVER"
if { $NUM_FILE < 3 } {
# puts "Il manque un fichier"
exec echo "Manque fichier serveur $SERVER" >> $WORK_DIR/$REPORT
set HOSTNAME "$HOSTNAME-Error_num_File"
}
# Les fichiers sont ils egale à zero ?
#-----------------------------------------------------------------
set CONTROL 1
foreach f [glob $IMPORT_DIR/$SERVER/*] {
set FILE_SIZE [file size $f]
if {[file size $f] == 0} {
puts "fichier à zero"
exec echo "Le fichier $f a une taille égale a 0" >> $WORK_DIR/$REPORT
set HOSTNAME "$HOSTNAME-Error_empty_file"
}
}
# Compréssion du fichier
exec zip -rj $EXPORT_DIR/$HOSTNAME $IMPORT_DIR/$SERVER
puts "End"
puts ""