Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/06/2007, 21h42   #1
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
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 :
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 :
1
2
3
4
rc=0
rc=1
rc=2
rc=3
J'ai cherché mais sans succès
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 21h47   #2
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à 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
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 21h50   #3
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
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 ?
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 21h53   #4
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à Shugo78
Ta éxécuter le script en affichant la variable après ?
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 22h58   #5
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Olivier Regnier
Bonjour

Je souhaite savoir à quoi correspond ce fameux rc comme par exemple :
Code :
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".
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 23h02   #6
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à Shugo78
Bonne déduction BlaireauOne
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 23h03   #7
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
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 :
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
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 23h22   #8
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 23h32   #9
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Elle est à YES car dans mon fichier /etc/periodic.conf, j'ai cette ligne :
Code :
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
++
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2007, 15h57   #10
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à Shugo78
Alors ?
Tu mets du temps pour manger ton morceau
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2007, 21h40   #11
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
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
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2007, 21h45   #12
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à Shugo78
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 )
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 11h40   #13
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Bon me revoici

Voici un extrait du code sans le case in:
Code :
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 :
/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 :
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
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 14h53   #14
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
J'ai opté pour une solution différente et mon script fonctionne

Merki à tous
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 19h54   #15
Membre émérite
 
Avatar de Shugo78
 
Inscription : mars 2007
Messages : 1 114
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2007
Messages : 1 114
Points : 974
Points : 974
Envoyer un message via MSN à Shugo78
De rien
J'ai pas fait grand chose a part discuter et fantasler sur de la nourriture
__________________
Le savoir est un droit universel, libérez le code source
Mon site
Aidez nous à militer pour l'adoption d'un nouveau smiley
"C'est en s'attardant en bas que l'on monte plus haut "
"Un home qui veut faire de grande chose doit vivre comme s'il ne devait jamais mourrir !"
attention je mords
Bye
Shugo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h32.


 
 
 
 
Partenaires

Hébergement Web