lundi 19 janvier 2009
Télécharger un fichier avec la commande wget
Pour télécharger un fichier en ligne de commande à partir d'une adresse IP, vous pouvez utiliser la commande wget.
- 1ere solution : télécharger le fichier et le stocker au niveau du répertoire courant
wget http://**.***.**.***/file.html
- 2eme solution : télécharger le fichier et le stocker dans un répertoire particulier (avec l'option -O)
wget http://**.***.**.***/file.html -O cheminDeStockage/monFichier
- 3eme solution : télécharger le fichier et ne pas générer de sortie à la console (avec l'option --quiet)
wget --quiet http://**.***.**.***/file.html
- 4eme solution : effectuer plusieurs essais en cas d'échec de téléchargement (avec l'option --tries)
wget http://**.***.**.***/file.html --tries=5
- 5eme solution : effectuer plusieurs essais de n secondes chacun (avec les options --tries et --timeout)
wget --tries=2 --timeout=5 http://**.***.**.***/file.html
- 6eme solution : effectuer un téléchargement en passant par un proxy
http_proxy="http://adresseDuProxy:Port" (exemple : http_proxy="http://**.**.***.***:8080"
wget --proxy-user "*****" --proxy-passwd "*******" http://adressePageATelecharger/ --proxy="on"
Pour plus d'options, je vous recommande de lire le man de cette commande :
jeudi 20 novembre 2008
Tester si un fichier existe et est non vide (en ksh)
En ksh, c'est simple tout est optimisé, concis et clair !
Alors en une ligne et en très peu de commandes, ci-dessous un test à utiliser et à ré-utiliser pour tester si un fichier existe et est non vide :
if [[ -e $PATH && -s $PATH ]]
then
#placer votre code ici
fi
ps : code récupéré lors de ma formation en ksh (formation IBM AL32FR)
Pour info : sur ce site vous trouverez d'autres tests.
mardi 18 novembre 2008
Date de la veille en ksh
Vous devez récupérer les fichiers de logs de la veille (ayant pour extension une date) et vous ne savez pas comment faire. Si on soustrait un jour et que nous sommes le premier jour du mois par exemple ?? Ou encore, si nous sommes le 1er jour de l'année, nous passons dans ce cas à l'année précédente.
Sachez que j'ai trouvé un script fonctionnel sur ce site : commentcamarche.net
Merci Slamagirand!
J'ai juste le format de la date :
#!/bin/ksh
#
# fonction qui recupere la date de la veille :
# date -d '1 days ago'
#
YESTERDAY=$((`date +%d` -1))
MONTH=`date +%m`
YEAR=`date +%Y`
NDAY=`date +%u`
#
if [ $YESTERDAY -eq "0" ];
then
#
MONTH=$((MONTH-1))
#
if [ $MONTH -eq "0" ];
then
#
MONTH=12
YEAR=$((YEAR-1))
#
fi
#
set `cal $MONTH ${YEAR}`
shift $(($# - 1))
YESTERDAY=$1
#
fi
########################################################
PATH="/Path/monFichierDeLogs${YEAR}-${MONTH}-${YESTERDAY}..log"
echo $PATH
lundi 27 octobre 2008
Date en ksh
20081027183742
Comment obtenir ce type de date en ksh ?
20081027183742 soit année en quatre chiffres + mois en deux chiffres + jour en deux chiffres + heure au format 24h et non 12h + minutes + secondes
Vous utilisez la fonction date à laquelle vous passez les paramètres adéquates à savoir :
# initialisation d'une variable VarDate, attention, ce sont des anti-quotes (Alt Gr+7 sur votre clavier)
VarDate=`date +%Y%m%d%H%M%S`
# affichage de la date en question, attention une fois stockée dans la variable, cette date ne peut être dynamique.
echo $Date
ça donne ceci :
20081027183742
# création d'un fichier de log avec la date
touch log_file_${Date}.log
ça donne ceci :
-rw-r--r-- 1 user1 group1 0 Oct 27 18:44 log_file_20081027183742.log
Ceci s'avère très pratique aussi pour les commentaires au sein de vos fichiers de logs.
Pour connaître les différents formats de date, tapez "man date" dans votre terminal Linux préféré ou bien visitez ce site.
jeudi 23 octobre 2008
cut and paste in ksh for weekly reports instead of daily reports
Si comme moi, on vous demande au dernier moment un fichier reporting hebdomadaire alors qu'au départ c'était censé être un fichier reporting quotidien, je vous recommande ces quelques lignes ci-dessous.
Le but est de concaténer ligne à ligne les différents fichiers que vous avez déjà généré au préalable.
1ère étape : couper les lignes correspondant aux colonnes souhaitées et les coller dans un fichier temporaire.
Dans mon exemple, je n'ai qu'une seule colonne, d'où l'utilisation de -f2 (en vert) dans la ligne de commande. De plus, mon séparateur de colonnes est le point-virgule : -d\; (en bleu).
cut -d\; -f2 result.Tuesday.csv > result.Tuesday.tmp.csv;
cut -d\; -f2 result.Wednesday.csv > result.Wednesday.tmp.csv;
cut -d\; -f2 result.Thursday.csv > result.Thursday.tmp.csv;
cut -d\; -f2 result.Friday.csv > result.Friday.tmp.csv;
2ème étape : concaténation des fichiers générés via la commande cut.
paste -d\; result.Monday.csv result.Tuesday.tmp.csv result.Wednesday.tmp.csv result.Thursday.tmp.csv result.Friday.tmp.csv > result.weekly.csv;
3ème étape : suppression des fichiers temporaires.
rm result.*.tmp.csv
vendredi 26 septembre 2008
Bref aperçu des tableaux en ksh
J'ai suivi il y a un mois une formation à la programmation ksh et tous les jours j'essaie de mettre en application ce que j'y ai appris. J'optimise mes scripts ou plutôt pseudo-scripts. De ce fait, nous allons voir comment manipuler un tableau en ksh.
Initialisation d'un élément d'un tableau :
tab[0]="valeur 0"
tab[1]="valeur 1"
tab[2]="valeur 2"
...
tab[n]="valeur n"
Accès aux éléments du tableau :
${tab[0]}
${tab[1]}
...
${tab[n]}
Attention pour indiquer le contenu entier d'un tableau, ne surtout pas utiliser $tab ! En effet, $tab correspond uniquement au 1er élément d'un tableau :
$tab identique à $tab[0]
Contenu entier d'un tableau : ${tab[@]}
Exemple :
Je crée un script permettant d'exécuter quatre scripts ksh et de m'envoyer le résultat global : 0 si l'un des programmes retourne une erreur et 1 si TOUS les programmes sont OK. Ce type de programme peut être programmé dans le cron et lancé à intervalle régulier, le cron enverra un mail s'il y a une erreur. Une autre application possible est de lancer à distance ce programme via une application de supervision (zabbix par exemple).
$tab[0]=`/users/toto/prog1.ksh` #prog1.ksh renvoie 0 si KO et 1 si OK
$tab[1]=`/users/toto/prog2.ksh` #prog2.ksh renvoie 0 si KO et 1 si OK
$tab[2]=`/users/toto/prog3.ksh` #prog3.ksh renvoie 0 si KO et 1 si OK
$tab[3]=`/users/toto/prog4.ksh` #prog4.ksh renvoie 0 si KO et 1 si OK
for i in ${tab[@]}
do
if [[ $i -eq 0 ]]
then
echo "0"
exit
fi
done
# si aucune erreur le programme retourne par défaut 1
echo "1"







