Demande d'explication sur un script

Forum d'assistance et d'échange sur l'installation, la configuration, et l'utilisation des système Linux et BSD. Vous pouvez y poster vos questions concernant ces systèmes d'exploitation en faisant l'effort préalable de rechercher dans le forum, dans les manuels et les documentations que la réponse n'y figure pas.

Modérateur: modos Ixus

Demande d'explication sur un script

Messagepar specialfox » 25 Mai 2005 16:57

Bonjour,

je cherche des explications sur ce bout de script, que je trouve souvent dans les fichiers de démarrage de linux.

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

A quoi sert la première ligne et quel est le contenu de la variable NETWORKING, peut on afficher son contenu dans le shell de linux.

Merci pour votre pour un débutant.

A+
Avatar de l’utilisateur
specialfox
Second Maître
Second Maître
 
Messages: 29
Inscrit le: 09 Déc 2003 01:00

Messagepar tomtom » 25 Mai 2005 17:34

Salut..

C'est tout simple :

le script /etc/sysconfig/network contient a declaration de certaines variables (typiquement, HOSTNAME, GATEWAY, NETWORKING)....

On l'appelle pour positionner les variables. Mais si on l'appelait directement, les variables ne seraient positionnées que lors de l'execution du script, et on ne les aurait pas pour la suite.
Heureusement, il existe une commande qui s'appelle "source" et que l'on peut aussi appeler avec "."
Cetts comande permet d'executer les commandes d'un script, mais dans l'environnement courant. C'est pratique. cela permet de positionenr des variables entre autres. Dans ce cas, c'est ce qui est fait.

Ensuite, ben si NETWORKING vaut no (positionnée precedemment), ben pas la peine d'aller plus loin.. Exit 0 ;)



Un exemple sympa pour comprendre l'utilisation de "." :

#cat test.sh
exit
#./test.sh
#
#. ./test.sh



...

t.
One hundred thousand lemmings can't be wrong...
Avatar de l’utilisateur
tomtom
Amiral
Amiral
 
Messages: 6035
Inscrit le: 26 Avr 2002 00:00
Localisation: Paris

Messagepar specialfox » 25 Mai 2005 20:20

Merci beaucoup pour ces explications.

A+ :lol:
Avatar de l’utilisateur
specialfox
Second Maître
Second Maître
 
Messages: 29
Inscrit le: 09 Déc 2003 01:00

Messagepar Jacques- » 25 Mai 2005 23:01

Juste un commentaire sur ce qu'a dit très justement TomTom pour les options && et || que l'on rencontre souvent dans les scripts.
&& veut dire que si la commande précédente s'est bien passée (code de retour à 0), on exécute la commande qui suit, alors que || signifie le contraire.
Ca simplifie l'écriture des scripts mais ce n'est pas toujours plus lisible
Exemple :
if test -f /tmp/fichier ; then
echo "Le fichier existe"
else
echo "Le fichier est absent"
fi

peut être remplacé en :
[ -f /tmp/fichier ] && echo "Le fichier existe" || echo "Le fichier est absent"

C'est plus concis mais moins bien présenté.

Jacques
Avatar de l’utilisateur
Jacques-
Vice-Amiral
Vice-Amiral
 
Messages: 952
Inscrit le: 23 Jan 2003 01:00

Messagepar specialfox » 26 Mai 2005 13:39

Re-bonjour,

En fait dans mon script je voudrais tester si le réseau est activé ou pas.

J'ai essayé avec la variable NETWORKING, mais apparemment sur Ubuntu (Debian) la variable n'existe pas.

Avez-vous une idée ?

Merci.
Avatar de l’utilisateur
specialfox
Second Maître
Second Maître
 
Messages: 29
Inscrit le: 09 Déc 2003 01:00

Messagepar Jacques- » 26 Mai 2005 20:11

sous root :
ifconfig eth0 2>/dev/null | grep -q UP && echo OK || echo NOK

le fait bien si le réseau est UP pour l'interface demandée.

Le grep recherche le mot UP, et le && est exécuté si on le trouve, le || sinon.

Jacques
Avatar de l’utilisateur
Jacques-
Vice-Amiral
Vice-Amiral
 
Messages: 952
Inscrit le: 23 Jan 2003 01:00

Messagepar specialfox » 27 Mai 2005 08:40

merci pour la ligne mais lorsque je le teste l'interface est toujours UP, même lorsque je débranche le cable.

Je ne vois pas d'ou vient le problème ?


Merci
Avatar de l’utilisateur
specialfox
Second Maître
Second Maître
 
Messages: 29
Inscrit le: 09 Déc 2003 01:00

Messagepar Jacques- » 27 Mai 2005 08:59

PAs trop le temps de chercher, mais un simple ping -c 1 @IP >/dev/null 2>&1 && echo OK || echo NOK devrait faire l'affaire.
On peut préciser l'interface avec l'otion -I et l'adresse IP doit être celle de l'interface à contrôler.

Je doute que cela fonctionne si l'interface n'est pas opérationnelle, sinon une adresse de routeur ou de DNS doit pouvoir faire l'affaire (le -c 1 dit de n'envoyer qu'un paquet).

Jacques
Avatar de l’utilisateur
Jacques-
Vice-Amiral
Vice-Amiral
 
Messages: 952
Inscrit le: 23 Jan 2003 01:00


Retour vers Linux et BSD (forum généraliste)

Qui est en ligne ?

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