Bonjour à tous !
J'ai récupéré un script d'un ancien collègue qui est censé faire du failover, après l'avoir corrigé et modifié un peu (je ne m'y connais pas des masses en shell...)
J'obtiens une bad substitution qui se trouve à la dernière ligne de mon programme et je ne comprend pas pourquoi... Pouvez vous m'aider ?
Merci

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
#!/bin/sh
 
 
variable=0                                                         #Variable a initialiser lors du ping
 
google=209.85.227.105                                            #Premier test pour FT
 
wikipedia=208.80.152.2                                            #Second test pour FT
 
salesforce=204.14.234.36                                     #Test sur salesforce
 
medialook=91.121.42.182                                            #Test sur Medialook
 
atester=0                                                         #Variable qui va etre utiliser pour donner l'ip ou le DNS a  ping
 
FT=0
 
AT=0
 
export DATE=date                                                 #On stock la date dans une variable
 
 
ping(){                                                   #Fonction qui va envoyer un ping sur un nom DNS ou une adresse IP
 
    var=$(/usr/local/nagios/libexec/./check_ping $atester -w 3000.0,80% -c 5000.0,100% -p 1) #Recupere la sortie de la commande
 
    lettre_code=${var:5:1}                                                              #Recupere O(OK),W(Warning),C(Critical),U(Unknown)
 
    if [ "$lettre_code" = "O" ] ;then                                                  #Si le ping est dans un etat OK
 
                variable=1                                                                      #On initialise a 1
 
    elif [ "$lettre_code" = "W" ] ;then                                                #Sinon si le code est Warning
 
                variable=2                                                                      #On initialise a 2
 
    else                                                                                #Sinon si le code est Critical ou Unknown
 
                variable=3                                                                      #On initialise a 3
 
    fi
 
 
 
}
 
 
redirection(){
 
    atester=$google                                                           #On test une adresse sur FT
 
    ping
 
    if [ $variable -eq 1 ] ;then                                             #Si le ping est OK
 
                FT='OK'
 
                echo 'ping google ok',$var         
 
    elif [ $variable -eq 2 ] ;then                                           #Si le ping est WARN
 
                echo 'premier ping google non ok',$var
 
                ping
 
                echo 'second ping google',$var                                                                 #On relance le ping
 
                if [ $variable -eq 1 ] ;then                                         #Si c'est passe de WARN a OK
 
                    FT='OK'
 
                    echo ' second ping goole ok',$var
 
                else                                                                  #Si le ping n'est pas OK
 
                   atester=$wikipedia                                                #Si toujour WARN on test une autre adresse sur FT
 
                    ping
 
                    if [ $variable -eq 1 ] ;then                                     #Si le ping est OK sur la deuxieme adresse
 
                               FT='OK'
 
                               echo 'ping wiki ok',$var
 
                    else                                                              #Si le ping est warn ou critic ici aussi
 
                               FT='NOK'
 
                               echo 'ping wiki WARN ou critic',$var
 
                               email -s "Attention! Ligne FT a surveiller" informatique@cotral.com < /root/FT-down.txt
 
                    fi
 
                fi   
 
    else                                                                      #Si le ping est critic
 
                atester=$wikipedia                                                    #On test sur un second site sur FT
 
                ping
 
                if [ $variable -eq 1 ] ;then                                         #Si le ping est ok
 
                    FT='OK'
 
                    echo 'ping google crit , wiki ok',$var
 
        else                                                                  #Sinon
 
                    FT='NOK'
 
                    echo 'ping google et wiki critic',$var
 
                    email -s "Attention! Ligne FT a surveiller" informatique@cotral.com < /root/FT-down.txt     
 
                fi
 
    fi
 
    atester=$salesforce                                                       #On test salesforce et medialook
 
    ping
 
    if [ $variable -eq 1 ] ;then                                             #Si ping OK sur salesforce
 
                AT='OK'
 
                echo 'ping salesforce ok',$var  
 
    elif [ $variable -eq 2 ] ;then                                                                    #Si ping warn ou critic sur salesforce
 
                echo 'ping salesforce non ok',$var
 
                ping                                                                  #On relance un ping
 
                if [ $variable -eq 2 ] ;then                                         #Si c'est toujour warn
 
                   echo 'second ping salesforce warn',$var
 
                    atester=$medialook                                                 #On va tester Medialook
 
                    ping                                                              #on ping Medialook
 
                    echo 'ping medialook',$var
 
                    if [ $variable -eq 1 ] ;then                                     #Si le ping medialook est OK"
 
                               AT='OK'
 
                               echo 'ping medialook ok',$var
 
                    else                                                                  #Si le ping medialook est Warn ou critic aussi
 
                               AT='NOK'
 
                               echo 'ping medialook non ok',$var
 
                               email -s "Attention! Ligne AT a surveiller" informatique@cotral.com < /root/AT-down.txt
 
                    fi
 
                elif [ $variable -eq 1 ] ;then                                           #Si le ping salesforce repasse en OK
 
                    AT='OK'
 
                    echo 'ping salesforce redevenu ok',$var
 
                else                                                                      #Si le ping est critic
 
                   AT='NOK'
 
                   echo 'ping salesforce critic',$var
 
                   email -s "Attention! Ligne AT non fonctionnelle" informatique@cotral.com < /root/AT-down.txt
 
                fi
 
    else
 
                AT='NOK'
 
    fi
 
    if [ "$FT" = "OK" ] && [ "$AT" = "OK" ] ;then                              #Si FT et AT sont OK
 
                sed -i '/gateway/ s/192.168.10.1/192.168.10.3/I' /etc/network/interfaces
 
                /sbin/route del default gw 192.168.10.3                                         #On supprime la route AT si c'est la passerelle par defaut
 
                /sbin/route del default gw 192.168.10.1
 
                /sbin/route add default gw 192.168.10.3
 
                /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3   
 
                /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                /sbin/route add -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1         #Route par defaut pour salesforce
 
                /sbin/route add -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1          #Route par defaut pour medialook
 
                atester=$google
 
                ping
 
                if [ $variable -eq 1 ] ;then
 
                               sed -i '/gateway/ s/192.168.10.1/192.168.10.3/I' /etc/network/interfaces
 
                               /sbin/route del default gw 192.168.10.3                                         #On supprime la route AT si c'est la passerelle par defaut
 
                               /sbin/route del default gw 192.168.10.1
 
                               /sbin/route add default gw 192.168.10.3
 
                               /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1
 
                               /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3                    #Route par defaut de FT
 
                               /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3   
 
                               /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                               /sbin/route add -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1         #Route par defaut pour salesforce
 
                               /sbin/route add -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1          #Route par defaut pour medialook
 
                               echo $DATE":Ligne France Telecom: OK" >> /var/log/failover.log
 
 
 
                elif [ $variable -eq 2 ] ;then
 
                               atester=$wikipedia
 
                               ping
 
                               if [ $variable -ne 1 ] ;then                                   #Si la valeur n'est pas OK
 
                                               sed -i '/gateway/ s/192.168.10.3/192.168.10.1/I' /etc/network/interfaces 
 
                                               /sbin/route del default gw 192.168.10.3                                         #On supprime la route FT si c'est la passerelle par defaut
 
                                               /sbin/route del default gw 192.168.10.1
 
                                               /sbin/route add default gw 192.168.10.1
 
                                               /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3
 
                                               /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1                    #change Route par defaut de FT
 
                                               /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3   
 
                                               /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                                               echo $DATE":Ligne France Telecom: Non OK" >> /var/log/failover.log
 
                               fi
 
                else
 
                               sed -i '/gateway/ s/192.168.10.3/192.168.10.1/I' /etc/network/interfaces  #Si la passerelle par defaut dans le fichier n'est pas 192.168.10.1 on la remplace
 
                               /sbin/route del default gw 192.168.10.3                                         #On supprime la route FT si c'est la passerelle par defaut
 
                               /sbin/route del default gw 192.168.10.1
 
                               /sbin/route add default gw 192.168.10.1
 
                               /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3
 
                               /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1                    #change Route par defaut de FT
 
                               /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3   
 
                               /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                               echo $DATE":Ligne France Telecom: OK" >> /var/log/failover.log
 
                fi
 
                atester=$salesforce
 
                ping
 
                if [ $variable -eq 2 ] ;then
 
                               atester=$medialook
 
                               ping
 
                               if [ $variable -ne 1 ] ;then
 
                                               sed -i '/gateway/ s/192.168.10.3/192.168.10.1/I' /etc/network/interfaces
 
                                               /sbin/route del default gw 192.168.10.3                                         #On supprime la route FT si c'est la passerelle par defaut
 
                                               /sbin/route del default gw 192.168.10.1
 
                                               /sbin/route add default gw 192.168.10.3
 
                                               /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1
 
                                               /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3                    #change Route par defaut de FT
 
                                               /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1   
 
                                               /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1
 
                                               echo $DATE":Ligne Altitude: Non OK" >> /var/log/failover.log
 
                               fi
 
                elif [ $variable -eq 3 ] ;then
 
                               sed -i '/gateway/ s/192.168.10.3/192.168.10.1/I' /etc/network/interfaces
 
                               /sbin/route del default gw 192.168.10.3                                         #On supprime la route FT si c'est la passerelle par defaut
 
                               /sbin/route del default gw 192.168.10.1
 
                               /sbin/route add default gw 192.168.10.3
 
                               /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1
 
                               /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3                    #change Route par defaut de FT
 
                               /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1   
 
                               /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1
 
                               echo $DATE":Ligne Altitude: Non OK" >> /var/log/failover.log
 
                else
 
                               echo $DATE":Ligne Altitude: OK" >> /var/log/failover.log
 
                fi
 
 
 
 
 
    elif [ "$FT" = "NOK" ] && [ "$AT" = "OK" ] ;then                                                       #Si FT est down et si AT est ok
 
                sed -i '/gateway/ s/192.168.10.3/192.168.10.1/I' /etc/network/interfaces  #Si la passerelle par defaut dans le fichier n'est pas 192.168.10.1 on la remplace
 
                /sbin/route del default gw 192.168.10.3                                         #On supprime la route FT si c'est la passerelle par defaut
 
                /sbin/route del default gw 192.168.10.1
 
                /sbin/route add default gw 192.168.10.1
 
                /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3
 
                /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1                    #change Route par defaut de FT
 
                /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3
 
                /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                echo $DATE":Ligne France Telecom: Non OK" >> /var/log/failover.log
 
                echo $DATE":Ligne Altitude: OK" >> /var/log/failover.log
 
    elif [ "$FT" = "OK" ] && [ "$AT" = "NOK" ] ;then                                                       #Si FT est ok et si AT est down
 
                sed -i '/gateway/ s/192.168.10.1/192.168.10.3/I' /etc/network/interfaces  #Si la passerelle par defaut dans le fichier n'est pas 192.168.10.3 on la remplace
 
                /sbin/route del default gw 192.168.10.3
 
                /sbin/route del default gw 192.168.10.1                                         #On supprime la route AT si c'est la passerelle par defaut
 
                /sbin/route add default gw 192.168.10.3
 
                /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1
 
                /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3                    #Route par defaut de FT
 
                /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1         #change Route par defaut pour salesforce
 
                /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1          #change Route par defaut pour medialook
 
                echo $DATE":Ligne France Telecom: OK" >> /var/log/failover.log
 
                echo $DATE":Ligne Altitude: Non OK" >> /var/log/failover.log
 
    else                                                                                                                                   #Si AT et FT sont down
 
                sed -i '/gateway/ s/192.168.10.1/192.168.10.3/I' /etc/network/interfaces  #Si la passerelle par defaut dans le fichier n'est pas 192.168.10.3 on la remplace
 
                /sbin/route del default gw 192.168.10.3
 
                /sbin/route del default gw 192.168.10.1                                         #On supprime la route AT si c'est la passerelle par defaut
 
                /sbin/route add default gw 192.168.10.3
 
                /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.1
 
                /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.10.3                    #Route par defaut de FT
 
                /sbin/route del -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.3
 
                /sbin/route del -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.3
 
                /sbin/route add -net 204.14.232.0 netmask 255.255.248.0 gw 192.168.10.1         #Route par defaut pour salesforce
 
                /sbin/route add -net 91.121.42.182 netmask 255.255.255.255 gw 192.168.10.1          #Route par defaut pour medialook
 
                echo $DATE": Ligne France Telecom: Non OK" >> /var/log/failover.log
 
                echo $DATE": Ligne Altitude: Non OK" >> /var/log/failover.log
 
    fi
 
 
 
    echo 'fin du test'
 
}
 
redirection