Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/03/2015, à 11:49

Beuhlet_Reseau

Script : If avec plusieurs éléments [RESOLU]

Bonjour,

Je réalise un script de vérification sur le réseau.

Certains OS/SE ne supporte pas la commande /usr/sbin/ping ou encore /usr/bin/netstat. Cependant elles ne représentent qu'une minorité dans le parc.

Dans mon script j'aimerais donc mettre une condition pour contourner le problème.

Les Machines avec l'os récalcitrant ont été identifiées et placées dans un groupe. Je cherche un faire une commande de ce style quand le script rencontre des machines de ce type de groupe :

[Debut du script]
...
=> [ IF $grpSPE = grpSPE 1 ou grpSPE2 ]
     then
             commande appropriée
     else
             déroulement normal.
     fi

Sa pourrait fonctionner comme sa je suppose ?

Merci

Dernière modification par Beuhlet_Reseau (Le 02/04/2015, à 15:31)


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#2 Le 25/03/2015, à 11:53

Shanx

Re : Script : If avec plusieurs éléments [RESOLU]

SAlut,

if [ "$grpSPE " == "grpSPE 1" ] || [ "$grpSPE " == "grpSPE 2" ] ; then
    echo "foo"
else
    echo bar
fi

Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#3 Le 25/03/2015, à 12:10

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Shanx a écrit :

SAlut,

if [ "$grpSPE " == "grpSPE 1" ] || [ "$grpSPE " == "grpSPE 2" ] ; then
    echo "foo"
else
    echo bar
fi

Merci beaucoup Shanx le roux. Foo et bar sont tes genres de mots fourre tout ?


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#4 Le 25/03/2015, à 12:23

Shanx

Re : Script : If avec plusieurs éléments [RESOLU]

Beuhlet_Reseau a écrit :

Foo et bar sont tes genres de mots fourre tout ?

Yep. Explication en anglais, ou en français.


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#5 Le 25/03/2015, à 13:38

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Dernière petite chose, pour éviter de mettre le lanceur de script ./ pour l’exécuter, j'ai mis mon script dans un répertoire Path "/usr/local/bin/".

Mais lorsque je lance mon script pour récupérer les informations en sortie j'obtiens ce genre de résultat :

GroupeSPE;/usr/local/bin/check;serveur;OK;Pas de problème;

Seulement au lieu du chemin du dossier en retour de valeur $0 (/usr/local/bin/) j'aimerais seulement avoir le nom de mon script donc ici Check


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#6 Le 25/03/2015, à 14:35

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

…
CheminDuScript="$0"
nomDuScript=$(basename "$0")
…

Dernière modification par MicP (Le 25/03/2015, à 14:42)

Hors ligne

#7 Le 25/03/2015, à 15:33

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

MicP a écrit :
…
Indescriptible="$0"
nomDuScript=$(basename "$0")
…


Donc si j'ai mis mon script dans le repertoire "/usr/local/bin/" et que depuis ce répertoire j'ai copié le script dans le répertoire "script_check", au début de mon script j'insère :

Début script :

/usr/local/bin/="$0"
Script=$(basename "$0")

echo "Plateforme;Script;Serveurs;Nok/OK;Problème" > $check

[...]

echo "$GroupeSPE;$0;$serveur;OK;Rien A Signaler;" >> $check

Fin.


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#8 Le 26/03/2015, à 08:45

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

Lit la page du manuel de la commande "basename"

man basename

=======
Un exemple de contenu d'un script utilisant la commande "basename"

#!/bin/bash
CheminDuScript="$0"
nomDuScript=$(basename "$0")
echo "$CheminDuScript"
echo "$nomDuScript"

=======

Beuhlet_Reseau a écrit :

Mais lorsque je lance mon script pour récupérer les informations en sortie j'obtiens ce genre de résultat :

GroupeSPE;/usr/local/bin/check;serveur;OK;Pas de problème;

Donne nous le contenu complet de ton script pour qu'on puisse comprendre comment tu as pu obtenir ce retour ,
car avec ce que tu as donné jusqu'à présent, c'est impossible à deviner.

=======
Eric Sanchis : Introduction à la programmation en Bash

Dernière modification par MicP (Le 26/03/2015, à 08:53)

Hors ligne

#9 Le 26/03/2015, à 15:40

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

C'est bon le problème est réglé avec basename.

Je travaille sur un parc combinant Linux et Sun (majoritairement).

Dans mon script lorsque l'os est identifié comme Sun il continu son déroulement normal, mais lorsqu'il rencontre un linux certaines commandes système ne sont pas acceptées c'est notamment le cas du ping qui du côté Sun va retourner "srv alive" ce qui n'est pas le cas côté Linux.

Pour aller plus loin

if [ "$grpSPE " == "grpSPE 1" ] || [ "$grpSPE " == "grpSPE 2" ]
	  then
	         Ping  (Linux)
          else
	         /usr/sbin/ping host > verif       (Sun)

Mon souci sera d'utiliser le ping sur le linux en prenant en compte si le ping est réussi ou non car sur Linux il y a pas de retour style alive ou autre mais les lignes basiques :

aus106root#ping -c3 srv
PING srv (2.2.2.2) 56(84) bytes of data.
64 bytes from aus106 (2.2..2): icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from aus106 (2.2..2): icmp_seq=2 ttl=64 time=0.020 ms
64 bytes from aus106 (2.2.2.2): icmp_seq=3 ttl=64 time=0.017 ms

--- srv ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.017/0.018/0.020/0.003 ms

Comment extraire l'information prouvant qu'il est alive ou down et l'incorporer dans mon script ?

Pour l'instant j'avais pensé à sa :

if [ "$grpSPE " == "grpSPE 1" ] || [ "$grpSPE " == "grpSPE 2" ]
	  then
	         p=`ping -c3 aus106`
                 if [ $p = /100%/ ]
                 then
                         echo "aus106 est pas connectee"
                 else
                         echo "aus106 est connectee" > verif
                 fi
          else
	         /usr/sbin/ping host > $verif       (Sun)
          if [ -s verif ]
	  then
                   déroulement du script
          fi

p=`ping -c3 aus106`      Ces commandes vont me servir en cas de paquet
if [ $p = /100%/ ]            perdu à 100% (donc machine down) mais si elle est up elle crée verif.

Note : Le fichier verif sert à ce que le script continu son déroulement, car pour continuer il test si le fichier verif contient quelque chose.


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#10 Le 26/03/2015, à 15:51

Shanx

Re : Script : If avec plusieurs éléments [RESOLU]

Plus simple :

if [ ping -c 1 aus106 > /dev/null ] ; then
    echo "aus106 est connectee" > verif
else
    echo "aus106 est pas connectee"

Et plutôt que de créer un fichier, tu devrais utiliser une variable (qui vaut 0 si down, 1 si up par exemple).


Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#11 Le 26/03/2015, à 16:03

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Shanx a écrit :

Plus simple :

if [ ping -c 1 aus106 > /dev/null ] ; then
    echo "aus106 est connectee" > verif
else
    echo "aus106 est pas connectee"

Et plutôt que de créer un fichier, tu devrais utiliser une variable (qui vaut 0 si down, 1 si up par exemple).

if [ ping -c 1 aus106 > /dev/null ]
then

    echo "aus106 est connectee" > verif

else

    echo "aus106 est pas connectee"

fi
aus106root#./recup_ping
./recup_ping[1]: [: -c: unknown operator
aus106 est pas connectee

Il y a un problème vraisemblablement, le repertoire dev/null sert à quelque chose ou on peut le supprimer ?

Avec des 0 ou des 1 serait bien je pencherais sur ce genre de détail lorsque je peaufinerais mon script cool


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#12 Le 26/03/2015, à 16:06

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

Moins lisible, mais plus court :

michel@debG53SW:~$ ping -c3 -t3 192.168.0.1 >/dev/null && echo "A répondu au Ping" || echo "Pas de réponse au Ping";
A répondu au Ping
michel@debG53SW:~$ ping -c3 -t3 192.168.1.1 >/dev/null && echo "A répondu au Ping" || echo "Pas de réponse au Ping";
Pas de réponse au Ping
michel@debG53SW:~$ 
commande >/dev/null

La redirection ">" de la sortie d'une commande vers le répertoire "/dev/null" permet d'éviter l'affichage des message de la commande.

Dernière modification par MicP (Le 26/03/2015, à 16:18)

Hors ligne

#13 Le 26/03/2015, à 16:16

Watael

Re : Script : If avec plusieurs éléments [RESOLU]

salut,

sachant que la syntaxe, c'est

if command; then ...fi

ou command peut être test, ou une autre commande;.
le test est superfétatoire.

donc,

if ping -c3 -t3 $machine >/dev/null 2>&1; then : ...; else : ...; fi

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 26/03/2015, à 16:29

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

MicP a écrit :

Moins lisible, mais plus court :

michel@debG53SW:~$ ping -c3 -t3 192.168.0.1 >/dev/null && echo "A répondu au Ping" || echo "Pas de réponse au Ping";
A répondu au Ping
michel@debG53SW:~$ ping -c3 -t3 192.168.1.1 >/dev/null && echo "A répondu au Ping" || echo "Pas de réponse au Ping";
Pas de réponse au Ping
michel@debG53SW:~$ 
commande >/dev/null

La redirection ">" de la sortie d'une commande vers le répertoire "/dev/null" permet d'éviter l'affichage des message de la commande.


Merci cette commande fonctionne je vais voir pour l'insérer dans mon script. Peux tu m'expliquer quand même la commande :

La première partie est un simple ping de la machine sans afficher le résultat (ping -c3 -t3 192.168.0.1 >/dev/null) mais comment après il arrive a discerner le bon du mauvais résultat ?

Watael a écrit :

salut,

sachant que la syntaxe, c'est

if command; then ...fi

ou command peut être test, ou une autre commande;.
le test est superfétatoire.

donc,

if ping -c3 -t3 $machine >/dev/null 2>&1; then : ...; else : ...; fi

Si je devais adapter cette commande elle ressemblerais à celle citer plus haut ou non ? :

if ping -c3 -t3 192.168.0.1>/dev/null 2>&1
          then
                   ok
          else
                  nok
          fi

?


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#15 Le 26/03/2015, à 17:48

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

Beuhlet_Reseau a écrit :

… Peux tu m'expliquer quand même la commande :…

ping -c3 -t3 192.168.0.1 >/dev/null && echo "A répondu au Ping" || echo "Pas de réponse au Ping";

=======
Pour "-c3 -t3", (c'est juste adapté à mon contexte à moi chez moi, pour moi, pour la démo) voir :

man ping

=======
J'ai choisi ces adresses IP pour que la démo fonctionne chez moi.
"192.168.0.1" parce que je suis certain que cette adresse IP (ma box chez moi) va répondre au ping.
"192.168.1.1" parce que je suis certain que cette adresse IP n'est pas accessible (chez moi, depuis ma machine à moi)

=======
Je t'invite aussi à lire :

man icmp

et :

Wikipedia : ICMP

Wikipedia : TTL

Dernière modification par MicP (Le 26/03/2015, à 19:02)

Hors ligne

#16 Le 27/03/2015, à 12:58

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Merci M.I.T ton aide est précieuse.

Maintenant que les différences de système sont opériationnelles, je cherche pour les cas des Linux a comparé les fichiers des routes statiques avec celles des dynamiques.

Le script se déroule comme sa :
Choix du Groupe
Liste des serveurs du groupe

Création du fichier netstat (route dynamiques) avec traitement du texte à l'intérieur pour obtenir ce résultat (fichier netstat_ref):

10.10.10.10 via 10.11.11.11 dev bond0
10.10.10.11 via 10.11.11.11 dev bond0
10.10.10.12 via 10.11.11.11 dev bond0
10.10.10.13 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
                          [...]

D'un autre côté je récupère le fichier des routes statiques, en faisant un cat

####################################
#           LAN                                                  #
####################################
10.10.10.10/24 via 10.11.11.11 dev bond0
############################
#          LAN2                                 #
############################
10.10.10.11/18 via 10.11.11.11dev bond0

10.10.10.12/32 via 10.11.11.11 dev bond0
10.10.10.13/32 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
                       [...]

J'effectue le traitement suivant: Suppression des commentaires avec grep -v "#" :

10.10.10.10/25 via 10.11.11.11dev bond0
10.10.10.11/18 via 10.11.11.11 dev bond0
10.10.10.12/32 via 10.11.11.11 dev bond0
10.10.10.13/32 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
                               [...]

Mon souci intervient maintenant, j'essaye d'enlever le masque qui est en notation CIDDR en faisant un grev -v "/". Seulement il ne se contente pas d'enlever les /32, /26 ect mais la ligne entière (le principe du grev quoi) donc quelqu'un aurait une idée de comment contourner le problème ?

Merci


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#17 Le 27/03/2015, à 16:04

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

En cherchant dans les commandes sed, j'ai trouvé quelque chose d'intéressant :

Exemple : Le GUI est intuitif 

J'applique la commande : [b]sed s/GUI//g[/b] 

=> Le est intuitif

Donc sur mon problème :

Exemple : 192.168.1.1/25

J'applique la commande : sed s/\/**//g     (Je voulais donc supprimer sur chaque ligne le masque CIDR en loccurence le /25 ou /32 ect)

Mais la commande ne passe pas ...


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#18 Le 27/03/2015, à 16:40

Shanx

Re : Script : If avec plusieurs éléments [RESOLU]

sed 's/\/[0-9][0-9]//g'

Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied

Hors ligne

#19 Le 27/03/2015, à 16:45

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

Pour remplacer par une chaîne vide "le premier slash rencontré dans chaque ligne du texte et tous les caractères numériques qui pourraient le suivre" :

michel@debG53SW:~$ echo "10.10.10.13/ via 10.11.11.11 dev bond0" | sed 's/\/[0-9]*//'
10.10.10.13 via 10.11.11.11 dev bond0
michel@debG53SW:~$ 
michel@debG53SW:~$ echo "10.10.10.13/8 via 10.11.11.11 dev bond0" | sed 's/\/[0-9]*//'
10.10.10.13 via 10.11.11.11 dev bond0
michel@debG53SW:~$ 
michel@debG53SW:~$ echo "10.10.10.13/32 via 10.11.11.11 dev bond0" | sed 's/\/[0-9]*//'
10.10.10.13 via 10.11.11.11 dev bond0
michel@debG53SW:~$ 
michel@debG53SW:~$ echo "10.10.10.13/4242mêmepaseffacé via 10.11.11.11 dev bond0" | sed 's/\/[0-9]*//'
10.10.10.13mêmepaseffacé via 10.11.11.11 dev bond0

S'il y a un bon connaisseur des regex qui passe par là, qu'il n'hésite pas à y mettre son grain de sed, parce que je suis certain qu'il doit être possible de faire mieux (un motif plus ciblé).

Merci d'avance smile

=======
EDIT : J'aime bien celle la aussi :

sed 's|/[0-9]*||'

qui fait la même chose, mais comme elle utilise le caractère "|" comme caractère de séparation,
le caractère "/" qui est dans le motif n'a pas besoin d'être échappé.

Dernière modification par MicP (Le 27/03/2015, à 22:08)

Hors ligne

#20 Le 01/04/2015, à 11:36

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Merci j'ai obtenu mes 2 fichiers de routes traités.

Dans un ordre plus au moins bancale, du coup afin de vérifier la présence des routes dynamiques ou pas dans celui des statiques j'ai juste à faire cela n'est ce pas :

Variables :

fichier1 = route_statique        ## Fichier résultat d'un cat, grep, sed
fichier2 = route_dynamique   ## Fichier résultat d'un netstat -nr

Je les trie :

sort fichier1 > $fichier1
sort fichier2 > $fichier2

Je les compare

Diff $fichier1 fichier2

Pour obtenir ce genre de message :

<Addr_ip> statique non présente en dynamique
<Addr_ip> dynamique non présente en statique
ect 
[...]

L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#21 Le 02/04/2015, à 04:11

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

michel@debG53SW:~/pourTests$ cat routDyna
10.10.10.11 via 10.11.11.11 dev bond0
10.10.10.12 via 10.11.11.11 dev bond0
10.10.10.13 via 10.11.11.11 dev bond0
10.10.10.10 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 
michel@debG53SW:~/pourTests$ cat routStat
10.10.10.10 via 10.11.11.11 dev bond0
10.10.10.13 via 10.11.11.11 dev bond0
10.10.10.11 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 
michel@debG53SW:~/pourTests$ sort routDyna > routDyna.sort
michel@debG53SW:~/pourTests$ sort routStat > routStat.sort
michel@debG53SW:~/pourTests$ diff routDyna.sort routStat.sort
3d2
< 10.10.10.12 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 

Hors ligne

#22 Le 02/04/2015, à 10:15

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

Oui voila en gros j'aurais même rajouter pour trier par rapport à l'interface réseau concerné à faire un sort k5 ( genre trie sur la 5ième colonne).

J'ai un souci au niveau du ping bizarrement quand je l'a passe dans la console cela fonctionne mais lorsque je le lance depuis un script :

verif=/script_romain/test_routesref_cat/result/verif
serveur=aus106

if [ ping -c 1 $serveur > /dev/null ]
then
        echo "$serveur est connectee" > $verif
else
        echo "$serveurest pas connectee"
fi

ou même sa

if [ rsh $serveur ping -c 1 $serveur > /dev/null ]
then
        echo "$serveur est connectee" > $verif
else
        echo "$serveurest pas connectee"
fi

J'ai ces messages d'erreurs

bem root#./te
./te[11]: ping: unknown test operator
aus106 est pas connectee

ou

bem root#./te
./te[11]: test: ] missing
aus106 est pas connectee

Aussi pourquoi lors du déroulement du script en ayant renseigné l'endroit ou créer le fichier verif il indique une erreur de création :

verif=/script_ro/test_routesref_cat/result/verif

Message d'erreur lors du déroulement du script :

bem root#./te
touch $verif: /script_ro/test_routesref_cat/result/ cannot create
./te[11]: /script_ro/test_routesref_cat/result/: cannot create

L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#23 Le 02/04/2015, à 10:45

Beuhlet_Reseau

Re : Script : If avec plusieurs éléments [RESOLU]

MicP a écrit :
michel@debG53SW:~/pourTests$ cat routDyna
10.10.10.11 via 10.11.11.11 dev bond0
10.10.10.12 via 10.11.11.11 dev bond0
10.10.10.13 via 10.11.11.11 dev bond0
10.10.10.10 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 
michel@debG53SW:~/pourTests$ cat routStat
10.10.10.10 via 10.11.11.11 dev bond0
10.10.10.13 via 10.11.11.11 dev bond0
10.10.10.11 via 10.11.11.11 dev bond0
10.10.10.14 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 
michel@debG53SW:~/pourTests$ sort routDyna > routDyna.sort
michel@debG53SW:~/pourTests$ sort routStat > routStat.sort
michel@debG53SW:~/pourTests$ diff routDyna.sort routStat.sort
3d2
< 10.10.10.12 via 10.11.11.11 dev bond0
michel@debG53SW:~/pourTests$ 

Petite chose j'ai mes 2 fichier sorté maintenant le script est relativement cours donc ça me va. Néanmoins j'ai ce côté perfectionniste bien trop grand par rapport à mes connaissances (Voir George Jung).

J'ai maintenant mon script qui va me coller toutes les différences entre routes dyn et routes stat dans un fichier diff_routes.

J'ai fait en sort que ce fichier en plus d'un corps de message style tel ou tel serveur est NOK au vue du test de ces fichiers de routes, mais j'aimerais aller un peu plus loin pour faire en sort que pour chaque serveur (donc dans ma boucle actuelle) il me sort un fichier par serveur (on peut l'appeler delta_serveur) avec tel route statique non présente en dynamique ou tel route dynamique non présente en statique ?

Est ce possible sans faire un script long comme un bras ?


L'avenir appartient à ceux qui se lèvent tôt... Pas ceux qui crachent trop (vite?).

Hors ligne

#24 Le 02/04/2015, à 11:05

MicP

Re : Script : If avec plusieurs éléments [RESOLU]

bem root#./te
./te[11]: ping: unknown test operator
aus106 est pas connectee

mea culpa : j'aurai dû envisager le cas du retour de "stderr" (shell interactif…ou pas),
d'autant que Watael dans son post #13,  l'avait bien formulé en utilisant la redirection de stderr vers stdout (2>&1) pour que le tout ça aille à la poubelle (/dev/null).
donc, il faudrait reformuler la ligne de commande proposée dans mon post #14 :

ping -c3 -t3 192.168.0.1 >/dev/null 2>&1 && echo "A répondu au Ping" || echo "Pas de réponse au Ping";

Dernière modification par MicP (Le 02/04/2015, à 11:17)

Hors ligne

#25 Le 02/04/2015, à 20:30

Postmortem

Re : Script : If avec plusieurs éléments [RESOLU]

Salut,

Beuhlet_Reseau a écrit :

Oui voila en gros j'aurais même rajouter pour trier par rapport à l'interface réseau concerné à faire un sort k5 ( genre trie sur la 5ième colonne).

J'ai un souci au niveau du ping bizarrement quand je l'a passe dans la console cela fonctionne mais lorsque je le lance depuis un script :

verif=/script_romain/test_routesref_cat/result/verif
serveur=aus106

if [ ping -c 1 $serveur > /dev/null ]
then
        echo "$serveur est connectee" > $verif
else
        echo "$serveurest pas connectee"
fi

ou même sa

if [ rsh $serveur ping -c 1 $serveur > /dev/null ]
then
        echo "$serveur est connectee" > $verif
else
        echo "$serveurest pas connectee"
fi

Ton problème vient de la façon dont tu fais ton if ; la syntaxe de if en Shell, comme quelqu'un te l'a dit plus haut, est :

if commande1
then
commandes2
else
commandes3
fi

Si le code retour de commande1 est égal à 0, on exécute les commandes2 ; si le code retour de commande1 est différent de 0, on exécute commandes3.
Il faut donc écrire ton test comme ceci :

if ping -c 1 $serveur > /dev/null
then
        echo "$serveur est connectee" > $verif
else
        echo "$serveur est pas connectee"
fi

Les "[ ]" derrière un if ne sont qu'un raccourci de la commande "test", ceci :
if [ $toto -eq 1 ]
Équivaut à :
if test $toto -eq 1


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne