#!/bin/sh # # Script qui cumule les durées des communications internet. # Le développement a été réalisé à partir des données issues # d'un abonnement à Free Télécom. # # Migrec (c) 2002 # # # # AVERTISSEMENT ! Il doit y avoir une ligne vide à la # fin du fichier indiqué en paramètre. # # On initialise les variables pour éviter les erreurs de calcul : total_heures=0 total_minutes=0 total_secondes=0 total_prix=0 function calcul() { # Cette fonction est appelée pour cumuler le temps. # On isole le nombre de secondes : secondes=`echo $duree | tr -d 'hms' | rev | cut -c 1-2 | rev | bc` # On ajoute les secondes de la ligne au total déjà calculé : total_secondes="$(($total_secondes + $secondes))" # Si le total est >= 60 alors, on rajoute une minute : if [ $total_secondes -ge 60 ] ; then total_minutes=$(($total_minutes + 1)) # On enlève 60secondes au total (pour faire le compte) : total_secondes=$(($total_secondes - 60)) fi minutes=`echo $duree | tr -d 'hms' | rev | cut -c 3-4 | rev | bc` total_minutes=$(($total_minutes + $minutes)) if [ $total_minutes -ge 60 ] ; then total_heures=$(($total_heures + 1)) # On enlève 60 minutes au total : total_minutes=$(($total_minutes - 60)) fi heures=`echo $duree | tr -d 'hms' | rev | cut -c 5-6 | rev | bc` if [ "$heures" ] ; then total_heures=$(($total_heures + $heures)) fi } function affichage() { echo -e "$date $heure $telephone $forfait ${prix}\t${total_prix}\t ${duree} \t${total_heures}h${total_minutes}m${total_secondes}s" # La même chose mais avec des colonnes alignées. # echo -e "${date:- } ${heure:- } ${telephone:- } ${prix}\t${total_prix}\t ${duree} \t${total_heures}h${total_minutes}m${total_secondes}s" } # Sur chaque ligne (forme jj-mm-aaaa*s*0.00, on met chaque élément dans une variable : grep -E '^[0-3][0-9]-[0-1][0-9]-200?.*s.*[0-9]+\.[0-9][0-9]$' $1 | while read date heure telephone duree forfait prix autre ; do forfait=$(echo $forfait | sed 's/\*//g') if [ "$forfait" = "F" ] ; then if [ "$forfait" = "F" -a "$prix" = "/" ] ; then # En cas d'appel à cheval entre forfait et hors-forfait. # On s'occupe de l'appel compris dans le forfait : calcul # On remplace le "/" par un coût nul "0.00" pour faire joli ! prix="0.00" affichage # Ensuite, on s'occupe de la seconde partie de la ligne. duree=$(echo $autre | cut -d ' ' -f 1 | sed 's/\*//') prix=$(echo $autre | cut -d ' ' -f 2) forfait="M" # On supprime les variables $date, $heure et $telephone. # Décommenter les lignes suivantes pour leur prise en compte. # unset date # unset heure # unset telephone fi # On calcule simplement quand c'est dans le forfait. calcul else prix=$forfait forfait="H" fi total_prix=$(echo $total_prix + $prix | bc ) affichage done