Scriptons ! ou pas !

Développement Web côté client (Xhtml, Css, Javascript), coté serveur et système (Php, Java, Mono, Perl, Python, C, C++), Gestion de projet (UML, CVS), Environnements de développement (Eclipse, Mozilla XPFE), 3D (OpenGL), Bases de données (PostgreSql, MySql) ...

Modérateur: Equipe de modération des forums

Re: Scriptons ?

Message par jonas » 17 Mai 2010, 14:40

dominix a écrit :
Code : Tout sélectionner
nligne1=`ps -ef | grep postfix | grep -v grep | wc -l`
pas beau; trop de pipe

le même en 2 commandes au lieu de 4
Code : Tout sélectionner
nligne=$(ps -ef | awk 'BEGIN{i=0};/[p]ostfix/ {i++};END{print i}')


bilan 13 ouverture de fd contre 21.


Bonjour,
Pour l'instant, je ne connais pas encore assez awk pour me lancer. En fait je commence à peine à vouvoyer awk et j'espère avoir le droit de le tutoyer dans quelque temps...

Cela dit, hier j'ai essayé de faire un petit script awk pour mettre en forme soigneusement les retours de la commande df -h et pour ensuite envoyer le résultat avec mutt.
C'est plutôt sympa et ça permet d'avoir un état de l'occupation des volumes à date fixe.

Le script awk est appelé par un script bash ... Pour le moment ça manque de commentaire, mais je l'ai écrit et testé hier.

Evidemment, tu vas me dire que je pourrais faire plus simple, et tu auras probablement raison Domi, mais tu es ingénieur et je suis autodidacte.
Ca fait une sacré différence de niveau et je peux te dire que je suis vraiment content d'arriver à faire ça... :roll:


1ere partie script bash
Code : Tout sélectionner
#!/bin/bash
# script bash combine a un script awk permettant d'analyser et de presenter dans un message structure l'occupation des volumes d'un systeme.
date > espacedisk.msg
echo "volume /" >> espacedisk.msg
df -h / | grep "/dev" | awk -f scriptawkdf.awk - >> espacedisk.msg
echo " " >> espacedisk.msg
echo "volume /home" >> espacedisk.msg
df -h /home | grep "/dev" | awk -f scriptawkdf.awk - >> espacedisk.msg
sleep 5
mutt -s "analyse espacedisk mobitux - test" destinataire@domaine.fr < espacedisk.msg


2eme partie : Le script awk
Code : Tout sélectionner
BEGIN{
FS=" ";
Device=0;
Taille=0;
Occupe=0;
Dispo=0;
Pourcent=0;
}
{
Device=$1;
Taille=$2;
Occupe=$3;
Dispo=$4;
Pourcent=$5;
}
END{
printf("Nom device: %s \n, Taille totale: %s \n, Volume occupe: %s \n, Volume dispo: %s \n, pourcentage occupe: %s \n ", Device, Taille, Occupe, Dispo, Pourcent);
}


A plus.
Celui qui a des idées reçues sur tout a surtout des idées reçues.
jonas
Equipe LoLiTa
 
Message(s) : 368
Inscription : 13 Déc 2004, 17:08
Localisation : Faa'a

Re: Scriptons ?

Message par dominix » 17 Mai 2010, 15:59

juste un truc.
c'est contre productif de faire un grep ET un awk, car le grep et nativement inclus dans awk.
Code : Tout sélectionner
df -h / | grep "/dev" | awk -f scriptawkdf.awk

devient
Code : Tout sélectionner
df -h / | awk -f scriptawkdf.awk

et le script awk se voit ajouter la condition /\/dev/
Code : Tout sélectionner
Pourcent=0;
}
/\/dev/
{
Device=$1;
Image
Avatar de l’utilisateur
dominix
Equipe LoLiTa
 
Message(s) : 581
Inscription : 17 Mars 2005, 16:53
Localisation : Moorea : Zone urbano-végétale

Re: Scriptons ?

Message par jonas » 17 Mai 2010, 17:18

dominix a écrit :juste un truc.
c'est contre productif de faire un grep ET un awk, car le grep et nativement inclus dans awk.


Tu as parfaitement raison, je m'en suis rendu compte en continuant à tester...
C'est en cours de nettoyage.

dominix a écrit :
Code : Tout sélectionner
df -h / | grep "/dev" | awk -f scriptawkdf.awk

devient
Code : Tout sélectionner
df -h / | awk -f scriptawkdf.awk

et le script awk se voit ajouter la condition /\/dev/
Code : Tout sélectionner
Pourcent=0;
}
/\/dev/
{
Device=$1;


OK.
Par contre, je me suis rendu compte que même comme ça sans ajouter de condition concernant la ligne, il fonctionne tout de même.
Mais je pense que c'est mieux en effet d'ajouter la condition concernant la ligne car ça le fait travailler exactement sur la chaine recherchée.
J'essaie de comprendre aussi le fonctionne de NR (concernant les numéro de ligne... J'ai l'impression qu'on peut lui dire de travailler sur un numéro de ligne en particulier, j'ai tenté dans le script, mais je n'ai pas vu de différence.
C'est vachement sympa awk, un peu compliqué pour quelqu'un comme moi, mais super sympa...

A plus.
Celui qui a des idées reçues sur tout a surtout des idées reçues.
jonas
Equipe LoLiTa
 
Message(s) : 368
Inscription : 13 Déc 2004, 17:08
Localisation : Faa'a

Re: Scriptons ?

Message par jonas » 22 Mai 2010, 12:16

J'ai peaufiné, en optimisant un peu le script d'origine, car ça faisait un peu sagoin... J'ai encore peaufiné (le 7/7/2010 car ça faisait gros bourrin... et maintenant... un peu moins)
Code : Tout sélectionner
mobitux:/home/jonas/ShellScripts# cat espacedisk.sh
#!/bin/bash
# script bash combine a un script awk permettant d'analyser et de presenter dans un message structure l'occupation des volumes d'un systeme.
# definition des variables correspondants aux chemin des fichiers.
# auteur     :   date   :  numver :Objet
#       :juin 2010 :  ver 0  : Creation  version 0
#       : 7/7/2010 :  ver 1  : simplification, ajout boucle for. version 1
nomclient=     # indiquer ici le nom du client qui figurera dans le message envoye par mutt. (fin du script)
# Notez qu'on peut recuperer le nom du serveur par la commande uname, ce qui peut permettre d'automatiser totalement le process.
mailadmin=      # indiquer ici l'adresse email de l'administrateur du serveur.
# on peut predefinir un fichier contenant l'adresse de l'admin. Cette adresse predefinie servira pour tous les scripts utilisant mutt.
log="/usr/scripts/espacedisk.msg"
sawk="/usr/scripts/scriptawkdf.awk"
mp=    # variable point de montage
# initialisation du fichier log avec la date du jour.
date > $log
for mp in `mount | grep ^/dev | cut -d " " -f3`
do
    # creation ligne volume mp
    echo "volume $mp" >> $log
    # application du filtre awk sur la commande df avec le script awk de la variable sawk.
    df -h $mp  | awk -f $sawk - >> $log
    # saut de ligne
    echo " " >> $log
done

# pause de 5 sec avant l'envoi du message.
sleep 5
cat $log
sleep 5
# envoi du message, l'installation d'un serveur smtp est indispensable, sinon cette partie échoue.
# Attention a modifier le nom du client.
mutt -s "analyse espace disque $nomclient" $mailadmin < $log


Je suis bien certain qu'on peu simplifier encore, mais ce sera pour une autre fois.
Celui qui a des idées reçues sur tout a surtout des idées reçues.
jonas
Equipe LoLiTa
 
Message(s) : 368
Inscription : 13 Déc 2004, 17:08
Localisation : Faa'a

Re: Scriptons ?

Message par jonas » 01 Juil 2010, 18:52

Bonsoir,
Récupérer les IP, c'est bien, mais il y a dyndns.org me direz-vous.
Je répondrai qu'il m'est arrivé de constater que le service était injoignable.

Par contre, mon script originel présentait quelques bugs.
Si la récupération de l'IP ne fonctionnait pas, ce qui arrive une fois de temps en temps et que la variable restait vide, il envoyait un message disant que la nouvelle IP est " " (vide)...
Plutôt gênant.

Pour résoudre ce problème, j'ai doublé le test : d'abord whatip.com puis monip.org.
Mais comme je voulais faire cela de façon à peu près élégante et essayer 3 fois en cas d'échec, j'ai fait une petite boucle.
J'avais déjà utilisé "while" précédemment... alors j'ai voulu varier les plaisirs, j'ai utilisé "until."
J'avais déjà fait des test sur une condition, alors pour compliquer j'ai fait un test sur deux conditions simultanées.
Par rapport à un Domi, un Alex ou J (par exemple), je suis encore un petit joueur, mais je monte en puissance.

Notez que j'ai fait un effort au niveau des commentaires et des indentations.


Code : Tout sélectionner
#!/bin/bash
#==========:=====================:=============================================================
# Auteur        :  Date                                :      observation
#==========:=====================:=============================================================
# Jonas          : 20100322                       :   Version 0  et version 1 Creation et mise en production
# Jonas          : 20100413                       :   Version 2 n'envoie l'adresse que lorsqu'elle a change.
# Jonas          : 20100630                       :   Version 3 - correction de bug -
#                                                     Envoi un message indiquant l'echec de renouvellement d'adresse
#                                                     lorque la variable PUBIP est vide. - Ajoute une source de verification d'IP.
#                :                                :   Version
#
#
###############################################################################################################################
# Creation de la variable indiquant le chemin du script et des fichiers associes.
SCRP="/usr/scripts"
#creation variable OLDPUBIP servant de reference pour comparer avec la nouvelle IP.
OLDPUBIP=`cat $SCRP/IPPUB.txt`
#creation et initialisation variable count (compteur incrementiel)
COUNT=0
ENDCOUNT=2
# PUBIP est la variable qui contiendra l'adresse IP publique du site.
PUBIP=""
###############################################################################################################################
# bloc d'instruction visant a recuperer l'adresse IP Publique du site.
# Utilisation d'une boucle until.
# test des variables COUNT ( COUNT = ENDCOUNT ) et PUBIP (PUBIP non nul)
# Si (if) cela echoue par whatIP, il la variable PUBIP (PUBIP est nulle) et dans ce cas recupere l'IP par monip 
# Incrementation du compteur a la fin de chaque boucle (sinon, la boucle est infinie).
until [ "$COUNT" -eq "$ENDCOUNT" -o -n "$PUBIP" ]
    do
    PUBIP=`wget http://www.whatip.com ; grep -i "your IP: " index.html | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`
    echo "$PUBIP par whatip"
    sleep 3
    if [ -z "$PUBIP" ]
       then
       PUBIP=`wget http://www.monip.org ; grep -i "IP : " index.html | grep -o " [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`       
       echo "$PUBIP par monip"
       else
       echo "la variable est deja remplie"
    fi
    echo " La variable de l'adresse IP contient : $PUBIP "
    sleep 2
    echo "le compteur est a $COUNT, la limite autorisee de compteur est $ENDCOUNT"
    let COUNT=$COUNT+1
    echo "Le nouveau compteur est a $COUNT"
    done
#Fin du bloc d'instruction visant a recuperer l'adresse IP publique.
###############################################################################################################################
echo affichage IP Publique
echo $PUBIP
# creation du fichier de reference pubip
echo $PUBIP > $SCRP/pubip
echo $PUBIP > $SCRP/IPPUB.txt

###############################################################################################################################
# bloc d'instruction visant a informer l'administrateur que la recuperation est impossible le cas echeant.
if [ -z $PUBIP ]
    then
    echo " recuperation IP impossible"
    mutt -a $SCRP/IPPUB.txt -s "recuperation IP impossible " adresse@domain.pf < $SCRP/IPPUB.txt
    exit 0
    else
    echo "L'adresse IP Publique a pu etre recuperee. Il s'agit de $PUBIP "
fi
sleep 2
# fin du bloc. Attention, si la machine n'est pas reliee a Internet, le message ne partira jamais...
###############################################################################################################################
###############################################################################################################################
# Bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee. Si un changement s'est produit,
# alors $PUBIP sera differente de l'ancienne adresse qui se trouvera dans la variable $OLDPUBIP
case $PUBIP in
        $OLDPUBIP )
                        echo "pas de changement"
                ;;
      * )
                        echo "changement adresse effectue depuis le dernier test"
                        # Envoi du contenu du fichier dans une boite aux lettre.
                        # L'extension ".txt" est ici  purement esthetique, bien que d un gout douteux.
                        mutt -a $SCRP/IPPUB.txt -s "IP publique modifiee - CLIENT "  adresse@domaine.pf < $SCRP/IPPUB.txt
                ;;
esac
# Fin du bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee.
################################################################################################################################
sleep 2
# suppression des anciens fichiers index.html qui peuvent parasiter et s accumuler.
rm -f $SCRP/index.html*
rm ~/index.html*

Celui qui a des idées reçues sur tout a surtout des idées reçues.
jonas
Equipe LoLiTa
 
Message(s) : 368
Inscription : 13 Déc 2004, 17:08
Localisation : Faa'a

Re: Scriptons ?

Message par J » 03 Juil 2010, 14:38

salut jonas,

j'ai trouve deux lignes de commande dans un bric-a-brac pour recup l'ip plus simplement ;

  • l'ip dans le reseau local :
    Code : Tout sélectionner
    ifconfig eth0 | awk '/inet / {print $2}' | cut -d ':' -f2

  • l'ip public internet :
    Code : Tout sélectionner
    wget -qO- icanhazip.com
le site icanhazip.com ne donne que l'ip (en clair, visible avec le navigateur) et rien d'autre...
Avatar de l’utilisateur
J
Equipe LoLiTa
 
Message(s) : 939
Inscription : 10 Jan 2005, 13:31
Localisation : Dans le cyberpf de mana

Re: Scriptons ?

Message par jonas » 03 Juil 2010, 18:40

J a écrit :salut jonas,

j'ai trouve deux lignes de commande dans un bric-a-brac pour recup l'ip plus simplement ;

  • l'ip dans le reseau local :
    Code : Tout sélectionner
    ifconfig eth0 | awk '/inet / {print $2}' | cut -d ':' -f2


Bonjour J,
En fait, c'est seulement l'IP publique qui m'interesse.
En ce qui concerne l'IP interne, ça ne pose pas de problème.
Cependant, lorsque eth0 n'est pas la carte utilisée, il faut rechercher la chorrespondant à une IP et différente de l'adresse loopback.
Mais je l'ai déjà fait dans certains exercices.


J a écrit :
  • l'ip public internet :
    Code : Tout sélectionner
    wget -qO- icanhazip.com
  • le site icanhazip.com ne donne que l'ip (en clair, visible avec le navigateur) et rien d'autre...

    Par contre, ton site est extra, je viens de tester. C'est purement génial.

    Ca je vais le conserver et l'intégrer dans mon script.
    Je ne conserverai les deux autres tests (whatip.com et monip.org) qu'en cas d'échec du premier.

    Merci pour l'info.
    :P
    Celui qui a des idées reçues sur tout a surtout des idées reçues.
    jonas
    Equipe LoLiTa
     
    Message(s) : 368
    Inscription : 13 Déc 2004, 17:08
    Localisation : Faa'a

    Re: Scriptons ?

    Message par dominix » 04 Juil 2010, 12:38

    pour recupere une IP il y a plein de façon. J'ai une préférences pour rester sur des sites polynésien, d'abord ça répond plus vite, et ensuite ça marche même lors des "perturbations solaires" :)

    voyons un peu ... par le port smtp par exemple :
    Code : Tout sélectionner
    #!/usr/bin/expect --
    if {! 1==\$argc } {
            send_user "checkip.exp <mailhost>\n\n\r"
            exit
    }

    set THOST [lindex \$argv 0]
    spawn telnet \$THOST 25
    expect "220"
    send "HELO mail.pf\r"
    expect "250"
    send "quit\r"
    exit
    et on l'appelle ainsi
    Code : Tout sélectionner
    checkip.exp pop.mana.pf |perl -ne 'print $1 if m/\[(\d+\.\d+\.\d+\.\d+)\]/'


    une autre solution plus simple
    Code : Tout sélectionner
    wget -q -O /dev/stdout http://202.3.245.22:8000/myip.php
    (demandez moi le script php si vous disposer d'un serveur sur internet)

    une autre solution : demander a mon routeur ADSL son IP (version NETGEAR)
    Code : Tout sélectionner
    curl -u admin:password -s -o - "http://192.168.0.1/s_status.htm"|grep -v '255.255.255'|perl -nle 'print $1 and last if m[(\d+\.\d+\.\d+\.\d+)]'
    ça change un peu selon le modele de routeur mais j'ai des version linksys, cisco , bewan, draytech ... pour ceux veulent.
    Image
    Avatar de l’utilisateur
    dominix
    Equipe LoLiTa
     
    Message(s) : 581
    Inscription : 17 Mars 2005, 16:53
    Localisation : Moorea : Zone urbano-végétale

    Re: Scriptons ?

    Message par jonas » 09 Juil 2010, 08:40

    Je m'incline, Maître.
    Celui qui a des idées reçues sur tout a surtout des idées reçues.
    jonas
    Equipe LoLiTa
     
    Message(s) : 368
    Inscription : 13 Déc 2004, 17:08
    Localisation : Faa'a

    Re: Scriptons ?

    Message par jonas » 22 Mai 2015, 16:10

    dominix a écrit :
    Code : Tout sélectionner
    nligne1=`ps -ef | grep postfix | grep -v grep | wc -l`
    pas beau; trop de pipe

    le même en 2 commandes au lieu de 4
    Code : Tout sélectionner
    nligne=$(ps -ef | awk 'BEGIN{i=0};/[p]ostfix/ {i++};END{print i}')


    bilan 13 ouverture de fd contre 21.




    Ouhla... On voit que je reviens de loin.
    Il y a encore mieux.

    nbligne=$(pgrep postfix | wc -l)
    Celui qui a des idées reçues sur tout a surtout des idées reçues.
    jonas
    Equipe LoLiTa
     
    Message(s) : 368
    Inscription : 13 Déc 2004, 17:08
    Localisation : Faa'a

    Re: Scriptons !

    Message par jonas » 22 Mai 2015, 16:12

    jonas a écrit :Bonsoir,
    Récupérer les IP, c'est bien, mais il y a dyndns.org me direz-vous.
    Je répondrai qu'il m'est arrivé de constater que le service était injoignable.

    Par contre, mon script originel présentait quelques bugs.
    Si la récupération de l'IP ne fonctionnait pas, ce qui arrive une fois de temps en temps et que la variable restait vide, il envoyait un message disant que la nouvelle IP est " " (vide)...
    Plutôt gênant.

    Pour résoudre ce problème, j'ai doublé le test : d'abord whatip.com puis monip.org.
    Mais comme je voulais faire cela de façon à peu près élégante et essayer 3 fois en cas d'échec, j'ai fait une petite boucle.
    J'avais déjà utilisé "while" précédemment... alors j'ai voulu varier les plaisirs, j'ai utilisé "until."
    J'avais déjà fait des test sur une condition, alors pour compliquer j'ai fait un test sur deux conditions simultanées.
    Par rapport à un Domi, un Alex ou J (par exemple), je suis encore un petit joueur, mais je monte en puissance.

    Notez que j'ai fait un effort au niveau des commentaires et des indentations.


    Code : Tout sélectionner
    #!/bin/bash
    #==========:=====================:=============================================================
    # Auteur        :  Date                                :      observation
    #==========:=====================:=============================================================
    #                   : 20100322                       :   Version 0  et version 1 Creation et mise en production
    #           : 20100413                       :   Version 2 n'envoie l'adresse que lorsqu'elle a change.
    #           : 20100630                       :   Version 3 - correction de bug -
    #                                                     Envoi un message indiquant l'echec de renouvellement d'adresse
    #                                                     lorque la variable PUBIP est vide. - Ajoute une source de verification d'IP.
    #                :                                :   Version
    #
    #
    ###############################################################################################################################
    # Creation de la variable indiquant le chemin du script et des fichiers associes.
    SCRP="/usr/scripts"
    #creation variable OLDPUBIP servant de reference pour comparer avec la nouvelle IP.
    OLDPUBIP=`cat $SCRP/IPPUB.txt`
    #creation et initialisation variable count (compteur incrementiel)
    COUNT=0
    ENDCOUNT=2
    # PUBIP est la variable qui contiendra l'adresse IP publique du site.
    PUBIP=""
    ###############################################################################################################################
    # bloc d'instruction visant a recuperer l'adresse IP Publique du site.
    # Utilisation d'une boucle until.
    # test des variables COUNT ( COUNT = ENDCOUNT ) et PUBIP (PUBIP non nul)
    # Si (if) cela echoue par whatIP, il la variable PUBIP (PUBIP est nulle) et dans ce cas recupere l'IP par monip 
    # Incrementation du compteur a la fin de chaque boucle (sinon, la boucle est infinie).
    until [ "$COUNT" -eq "$ENDCOUNT" -o -n "$PUBIP" ]
        do
        PUBIP=`wget http://www.whatip.com ; grep -i "your IP: " index.html | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`
        echo "$PUBIP par whatip"
        sleep 3
        if [ -z "$PUBIP" ]
           then
           PUBIP=`wget http://www.monip.org ; grep -i "IP : " index.html | grep -o " [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"`       
           echo "$PUBIP par monip"
           else
           echo "la variable est deja remplie"
        fi
        echo " La variable de l'adresse IP contient : $PUBIP "
        sleep 2
        echo "le compteur est a $COUNT, la limite autorisee de compteur est $ENDCOUNT"
        let COUNT=$COUNT+1
        echo "Le nouveau compteur est a $COUNT"
        done
    #Fin du bloc d'instruction visant a recuperer l'adresse IP publique.
    ###############################################################################################################################
    echo affichage IP Publique
    echo $PUBIP
    # creation du fichier de reference pubip
    echo $PUBIP > $SCRP/pubip
    echo $PUBIP > $SCRP/IPPUB.txt

    ###############################################################################################################################
    # bloc d'instruction visant a informer l'administrateur que la recuperation est impossible le cas echeant.
    if [ -z $PUBIP ]
        then
        echo " recuperation IP impossible"
        mutt -a $SCRP/IPPUB.txt -s "recuperation IP impossible " adresse@domain.pf < $SCRP/IPPUB.txt
        exit 0
        else
        echo "L'adresse IP Publique a pu etre recuperee. Il s'agit de $PUBIP "
    fi
    sleep 2
    # fin du bloc. Attention, si la machine n'est pas reliee a Internet, le message ne partira jamais...
    ###############################################################################################################################
    ###############################################################################################################################
    # Bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee. Si un changement s'est produit,
    # alors $PUBIP sera differente de l'ancienne adresse qui se trouvera dans la variable $OLDPUBIP
    case $PUBIP in
            $OLDPUBIP )
                            echo "pas de changement"
                    ;;
          * )
                            echo "changement adresse effectue depuis le dernier test"
                            # Envoi du contenu du fichier dans une boite aux lettre.
                            # L'extension ".txt" est ici  purement esthetique, bien que d un gout douteux.
                            mutt -a $SCRP/IPPUB.txt -s "IP publique modifiee - CLIENT "  adresse@domaine.pf < $SCRP/IPPUB.txt
                    ;;
    esac
    # Fin du bloc d'instruction visant a definir la conduite a tenir en fonction de l'adresse IP recuperee.
    ################################################################################################################################
    sleep 2
    # suppression des anciens fichiers index.html qui peuvent parasiter et s accumuler.
    rm -f $SCRP/index.html*
    rm ~/index.html*

    Celui qui a des idées reçues sur tout a surtout des idées reçues.
    jonas
    Equipe LoLiTa
     
    Message(s) : 368
    Inscription : 13 Déc 2004, 17:08
    Localisation : Faa'a

    Précédent

    Retour vers Développement et programmation

    Qui est en ligne ?

    Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)