IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Quelques explications sur un script shell


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Quelques explications sur un script shell
    Bonjour

    Sous FreeBSD, dans le répertoire /etc/periodic/daily se trouvent des scripts shell. Voici un exemple de script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/bin/sh -
    # Show which packages have been added, updated or deleted.
     
    # If there is a global system configuration file, suck it in.
    #
    if [ -r /etc/defaults/periodic.conf ]
    then
        . /etc/defaults/periodic.conf
        source_periodic_confs
    fi
     
    case "$daily_status_pkg_changes_enable" in
        [Yy][Ee][Ss])
    	if [ ! -f /usr/sbin/pkg_info ]; then
    	    echo '$daily_status_pkg_changes_enable is enabled but' \
    		 "/usr/sbin/pkg_info doesn't exist"
    	    rc=2
    	else
    	    bak=/var/backups
    	    rc=0
     
    	    if [ -f $bak/pkg_info.bak ]; then
    	    	mv -f $bak/pkg_info.bak $bak/pkg_info.bak2
    	    fi
    	    /usr/sbin/pkg_info > $bak/pkg_info.bak
     
    	    if ! cmp -sz $bak/pkg_info.bak $bak/pkg_info.bak2; then
    		echo ""
    		echo "Changes in installed packages:"
    		diff -U 0 $bak/pkg_info.bak2 $bak/pkg_info.bak \
    		| grep '^[-+][^-+]' | sort -k 1.2
    	    fi
    	fi
    	;;
     
        *)
    	rc=0
    	;;
    esac
     
    exit $rc
    Je souhaite savoir à quoi correspond ce fameux rc comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rc=0
    rc=1
    rc=2
    rc=3
    J'ai cherché mais sans succès

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Salut
    Ben c'est une simple variable
    Bon après, si ta question est : A quoi sert-elle ?
    Alors... peut être à déterminé le résultat d'une condition en cas de réutilisation plus ou moin externes

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Salut
    Citation Envoyé par Shugo78
    Salut
    Ben c'est une simple variable
    Bon après, si ta question est : A quoi sert-elle ?
    Alors... peut être à déterminé le résultat d'une condition en cas de réutilisation plus ou moin externes
    Je vois bien que c'est une variable mais la question comme tu le dis si bien c'est à quoi sert-elle exactement ?

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Ta éxécuter le script en affichant la variable après ?

  5. #5
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par Olivier Regnier
    Bonjour

    Je souhaite savoir à quoi correspond ce fameux rc comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rc=0
    rc=1
    rc=2
    rc=3
    J'ai cherché mais sans succès

    Dans le script que tu donnes en exemple, la variable "rc" (pour Return Code j'imagine), peut avoir les valeurs 0 ou 2 :

    0 : fin normale
    2 : fin anormale accompagnée du message $daily_status_pkg_changes_enable is enabled but /usr/sbin/pkg_info doesn't exist

    Si tous les scripts sont similaires à cet exemple, le code retour est accompagné d'un message d'anomalie explicatif

    Pour être plus complet, ces instructions "exit $rc" en fin de script permettent l'encapsulation et la gestion des codes retour dans un script "appelant".

  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Bonne déduction BlaireauOne

  7. #7
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Ah ok

    Alors pourquoi le script que j'essaye de développer depuis cet après-midi ne fonctionne pas. Enfin, il fonctionne sans le case in et rc=0 mais avec nada

    Voici mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #!/bin/sh
     
    # if there is a global system configuration file, suck it in.
    #
    if [ -r /etc/defaults/periodic.conf ]
    then
    	. /etc/defaults/periodic.conf
    	source_periodic_confs
    fi
     
    COUNTRIE=us
    RETVAL=0
    DATE=`date +%d/%m/%Y`
    LOGFILE=/var/log/system-update-report.log
     
    selectserver() {
    	# Checking fastest cvs server
    	server=`/usr/local/bin/fastest_cvsup -c $COUNTRIE | grep "1st" | \
    	awk {'print $3'}`
     
    	# Creating supfile
    	sed "s/*default host=.*/*default host=$server/" \
    	/usr/share/examples/cvsup/ports-supfile > /etc/ports-supfile
    }
     
    case "$daily_update_ports_tree_enable" in
    	[Yy][Ee][Ss])
     
    	# Begin
    	selectserver
     
    	# Fetching sources files
    	/usr/bin/csup /etc/ports-supfile
    	RETVAL=$?
    	if [ $RETVAL != 0 ]
    	then
    		echo "-> $DATE - Ports tree: error while fetching sources files." \
    		>> $LOGFILE
    		exit 0
    	fi
     
    	# Creating INDEX.db file
    	/usr/local/sbin/portsdb -Fu
    	RETVAL=$?
    	if [ $RETVAL != 0 ]
    	then
    		echo "-> $DATE - Ports tree: error while creating INDEX.db file" \
    		>> $LOGFILE
    		exit 0
    	fi
     
    	# Checking if applications needs to be updated
    	LIST=`/usr/local/sbin/portversion -l "<"`
    	RETVAL=$?
    	if [ $RETVAL != 0 ]
    	then
    		echo "-> $DATE - Ports tree: error while checking updates" \
    		>> $LOGFILE
    		exit 0
    	fi
     
    	# Result
    	if [ "$LIST" = "" ]
    	then
    		echo "-> $DATE - Ports tree: Up-To-Date" >> $LOGFILE
    	else
    		echo -e "-> $DATE - Ports tree: Up-To-Date. Here is list of \
    		applications needs to be updated.\n\n$LIST" >> $LOGFILE
    	fi;;
    	*) rc=0;;
    esac
     
    exit $rc
    Ceci dit, je commence à comprendre la bête

  8. #8
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par Olivier Regnier
    Ah ok

    Alors pourquoi le script que j'essaye de développer depuis cet après-midi ne fonctionne pas. Enfin, il fonctionne sans le case in et rc=0 mais avec nada

    Pour que le case fonctionne, il faut que la variable "daily_update_ports_tree_enable" soit à YES, Yes ou yes ...

    .../...
    case "$daily_update_ports_tree_enable" in
    [Yy][Ee][Ss])
    .../...



    Est souvent bien utile pour deboguer le shell

    set -x #-- Debut mode TRACE
    instruction(s) shell
    .../...
    set +x #-- Fin mode TRACE

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Elle est à YES car dans mon fichier /etc/periodic.conf, j'ai cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    daily_update_ports_tree_enable="YES"
    Je vais regarder si tout est prêt ensuite je mange un coup et j'appuis sur le bouton
    ++

  10. #10
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Alors ?
    Tu mets du temps pour manger ton morceau

  11. #11
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par Shugo78
    Alors ?
    Tu mets du temps pour manger ton morceau
    J'ai bien mangé et concernant le script que je termine actuellement, il fonctionne. Je vais d'ailleurs passer à la phase de test

  12. #12
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Super, je suis content pour toi, ta mangé au resto au moins ?
    Moi oui, des escalopes de porc hum.....
    Tien moi au courant (pour la phase de test pas pour tes repas )

  13. #13
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Bon me revoici

    Voici un extrait du code sans le case in:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    if [ ! -x /usr/local/sbin/portaudit ]
    then
            echo '$daily_ports_update_audit is set but' \
            "/usr/local/sbin/portaudit isn't executable" \
            >> $daily_ports_update_result
            exit 0
    else
            vlist=`/usr/local/sbin/portaudit -Fa \
            | grep "0" | awk '{ print $1 }'`
    fi
    if [ "${vlist}" != "" ]
    then
            echo -e '-> Ports audit: vulnerabilities' \
            "detected in the ports:\n\n${vlist}\n" \
            >> $daily_ports_update_result
    fi
    Si j'exécute en console la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/local/sbin/portaudit -Fa | grep "0" | awk '{ print $1 }'
    On obtient : 0 pour 0 vulnérabilités détectées.

    Comme le résultat = 0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [ "${vlist}" != "" ]
    then
            echo -e '-> Ports audit: vulnerabilities' \
            "detected in the ports:\n\n${vlist}\n" \
            >> $daily_ports_update_result
    fi
    Je ne devrais pas avoir dans mon log le contenu du echo -e

    Une idée ?

    Merki

  14. #14
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'ai opté pour une solution différente et mon script fonctionne

    Merki à tous

  15. #15
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    De rien
    J'ai pas fait grand chose a part discuter et fantasler sur de la nourriture

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SBI QBE] Quelques explication sur QBE et les data sources?
    Par troubleshooting dans le forum SpagoBI
    Réponses: 1
    Dernier message: 21/01/2009, 14h22
  2. Quelques explications sur les graphes orientés
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 08/06/2008, 17h50
  3. Explication sur un script
    Par donny dans le forum Linux
    Réponses: 6
    Dernier message: 29/06/2006, 11h33
  4. Recherche d'informations sur les scripts shell ?
    Par donny dans le forum Linux
    Réponses: 11
    Dernier message: 27/06/2006, 13h22
  5. Explication sur un script
    Par Krispy dans le forum Linux
    Réponses: 1
    Dernier message: 22/03/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo