# Script bascule de passerelle

**URL:** <https://www.debian-fr.org/t/script-bascule-de-passerelle/21702>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702 "2016-02-20T20:33:20Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/1 "2016-02-20T20:33:20Z")

</div>

Bonjour,

Je réalise un script pour changer la passerelle par defaut au niveau de mon serveur linux (iptables, squid, dansguardian)

Je dispose de 2 accès internet, le premier est mon serveur linux et le second est un routeur. mon but c’est que si le premier accès tombe en panne cela bascule sur les autres.  
(Mes postes lan sont configurés pour utilisé la passerelle par défaut LINUX)  
Voici mon script:

```auto
#!/bin/bash

Check_route_defaut=$(route | grep -cw "default 192.168.1.1")
echo etape1-check de la passerelle si 1 = passerelle 192.168.1.1==> $Check_route_defaut
if [$Check_route_defaut == 1];then
        echo "etape2- Si 1 (passerelle 192.168.1.1) check si connexion OK==> RAS ou non==>Changement de route"
        Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
        echo etape3-check la connexion neuf ==> $Check_connexion_neuf
                if [$Check_connexion_neuf == 1]; then
                        echo RAS
                else
                        #Route add default gw 172.16.0.175
                        #/etc/init.d/networking restart
                        echo Bascule sur la connexion de secours
                fi

else
        echo etape4-Si passerelle <> de 192.168.1.1 cela signifie qu on n est sur la connexion de secour
        Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
                echo "etape5 On check si la connexion neuf est revenue, si oui on rebascule sur la connexion neuf si non on reste sur celle de secour" ==>$Check_connexion_neuf

                if [$Check_connexion_neuf == 1]; then
                        #Route add default gw 192.168.1.1
                        #/etc/init.d/networking restart
                        echo bascule sur la connexion neuf
                else
                        echo reste sur la connexion de secours
                fi

fi
echo "poursuite ..."

```

Est-ce que mon script est correcte par rapport a mon explication? Y-a-t- il des erreurs?

Merci

guigui69

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/2 "2016-02-20T20:33:21Z")

</div>

\<\> : différent de en C mais en bash ❓

EDIT :  
tes ‘else’ n’ont aucune efficacité, sinon mettre un message, non ?

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/3 "2016-02-20T20:33:25Z")

</div>

Oui les else sont la pour afficher uniquement des messages (c’est pour les tests)

> [@](#):
>
> \<\> : différent de en C mais en bash

Quel est le problème?

guigui69

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/4 "2016-02-20T20:33:26Z")

</div>

Dans cette ligne :

```auto

```

il manque alors des “”, pour plus de clarté car on ne comprend pas bien que c’est un message à afficher, toute cette ligne.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/5 "2016-02-20T20:33:30Z")

</div>

De manière un peu plus basique ça active aussi la coloration syntaxique 🙂

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/6 "2016-02-20T20:33:40Z")

</div>

D’accord je corrige ca, sinon mon script est-il bon pour réalise se que je veut faire?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/7 "2016-02-20T20:33:41Z")

</div>

Je suis assez embêté j’aurais aimé trouvé une solution avec des bouléens de partout mais non le shell est trop limité pour ça il semble. Donc j’aurais juste une remarque sur la forme du code :

[code]#!/bin/bash

Check\_route\_defaut=$(route | grep -qw ‘default 192.168.1.1’ && true || false)  
Check\_connexion\_neuf=$(ls9box --ip 192.168.1.1 --status | grep -qw ‘Connexion Internet : up’)

if [$Check\_route\_defaut == 1 && $Check\_connexion\_neuf == 0]; then  
# On bascule sur la connexion de secours  
elif [$Check\_connexion\_neuf == 1];  
# On bascule sur la connexion neuf  
fi  
echo “poursuite …”[/code]  
Je trouve ça plus clair car on vois directement les deux cas qui entrainent un traitement. On voit en haut les deux tests exécutés, ils sont pas dupliqué dans le code. Vraiment dommage pour les booléens mais je vai regarder de plus près. 😈

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/8 "2016-02-20T20:33:45Z")

</div>

Merci pour ta réponse.

on ma proposer ceci comme script:

```auto
#!/bin/bash

addRoute() {
route add default gw $1
}

delRoute() {
route del default gw $1
}

defAddr="192.168.1.1"
resAddr="172.16.0.175"

Status=$(ls9box --ip $defAddr --status |grep -cw -- "- Connexion Internet : up")
Route=$(route |grep -cw "default *192\.168\.1\.1")

case $((Route + Status))
 in
   0)
        echo 1
        delRoute $defAddr
        addRoute $resAddr
   ;;
   1) case $Route
       in
         0)
                echo 2
                delRoute $resAddr
                addRoute $defAddr
         ;;
         1)
                echo 3
                delRoute $defAddr
                addRoute $resAddr
         ;;
      esac
   ;;
   2)
                echo 4
                delRoute $resAddr
                addRoute $defAddr
   ;;
esac

```

Qu’en pensez-vous?

guigui69

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:42 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/9 "2016-02-20T20:42:35Z")

</div>

Bonjour à tous,

Je revient (j’étais en vacance ![8)](https://www.debian-fr.org/uploads/default/original/1X/ae031e9834d19166598edd060b063d44f1829139.gif "Cool") ) et pour finir je voudrait que se script s’exécuter en tant que service.

Le but c’est qu’il exécute tout les XX minutes ce script, avant de partir j’avais trouvé de l’aide sur google, mais la impossible de remettre la main sur ces liens.

Quelqu’un pourrait-il m’éclairer sur la démarche à suivre?

Merci

guigui69

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:42 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/10 "2016-02-20T20:42:37Z")

</div>

Utilise cron 😛

---

<div class="post-metadata">

**Author:** ![SpaTule](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/b5ac83/32.png) [@SpaTule](https://www.debian-fr.org/u/SpaTule)\
**Post date:** [Février 20, 2016, 8:42 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/11 "2016-02-20T20:42:52Z")

</div>

Imaginons que ton script se trouve dans /root/scripts/gw\_change.sh

```auto

```

Ta crontab s’ouvre dans un editeur vi, il reste plus qu’à rajouter la ligne :

```auto

```

Et ton script se lancera tous les 1/4h. Change 15 par le nombre de minutes que tu veux…

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:43 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/12 "2016-02-20T20:43:45Z")

</div>

merci pour votre aide.

comment on utilise crontab -e car je rentre dedans je rajoute ma ligne, mais je n’arrive pas a enregistrer.

A chaque fois que je retourne dedans la ligne que j’ai ajouté n’y est plus.

---

<div class="post-metadata">

**Author:** ![guigui69](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/50afbb/32.png) [@guigui69](https://www.debian-fr.org/u/guigui69)\
**Post date:** [Février 20, 2016, 8:43 UTC](https://www.debian-fr.org/t/script-bascule-de-passerelle/21702/13 "2016-02-20T20:43:45Z")

</div>

c’est bon je suis arrivé a enregistrer.

Je test ca.

guigui69
