Initiation au bash

<releaseinfo>$Id: realisation.xml,v 1.2 2003/11/23 20:58:49 laurent Exp $</releaseinfo>

Résumé

Exercice relatif au langage bash

Télécharger cette page au format : PDF


1. Introduction
2. Paramètrage IP automatique
2.1. Objectif
2.2. Script
2.3. Script commenté
3. HOSTUP.bash
3.1. Objectif
3.2. Script

1. Introduction

2. Paramètrage IP automatique

2.1. Objectif

Appliquer une configuration réseau rapidement (IP, ROUTE) et vérifier la fonctionnalité de cette configuration.

Commandes :

  • Affecter une nouvelle adresse IP
  • Supprimer la route par defaut
  • Définir une nouvelle route
  • Vérifier l'accès à la nouvelle passerelle
  • Vérifier l'accès au réseau internet

2.2. Script


#!/bin/bash
declare ip_client=192.168.0.2
declare netmask=255.255.255.0
declare gateway=192.168.0.1
declare internet=195.221.234.11
declare n_script=ip_home
/sbin/./ifconfig eth0 $ip_client netmask $netmask
/sbin/./route del default
/sbin/./route add default gateway $gateway
echo
echo ================================================
echo "Détails des nouveaux paramètres IP appliqués :"
echo ================================================
echo
echo "Nouvelle adresse IP = $ip_client"
echo "Masque de sous réseau = $netmask"
echo "Nouvelle route par défaut = $gateway"
echo
echo ================================
echo "Test des nouveaux paramètres :"
echo ================================
echo
echo "Envoie d'une série de 4 ping vers la nouvelle passerelle $gateway :"
echo
echo "... Veuillez patienter un instant ..."
ping -c 4 -w 10 $gateway >/dev/null 2>&1
if [ "$?" = "0" ]
then
  echo
  echo "Résultats : YES !"
  echo "la passerelle $gateway est accessible (côté intranet)"
else
  echo
  echo "Résultats : PROBLEME !"
  echo "la passerelle $gateway n'est pas accessible (côté intranet)"
  echo "Vérifier votre connexion au réseau local ..."
  echo
  echo ===========================
  echo "Find du script $n_script"
  echo ===========================
  echo
  exit 0
fi
echo
echo "Envoie d'une série de 4 ping vers une machine internet (trinity) :"
echo
echo "... Veuillez patienter un instant ..."
echo
ping -c 4 -w 10 $internet >/dev/null 2>&1
if [ "$?" = "0" ]
then
  echo "Résultats : YES !"
  echo "la passerrelle $gateway est fonctionnelle :"
  echo "Trinity à correctement répondu à la série de 4 ping lui étant destinés."
  echo "votre accès internet est donc opérationnel depuis cette machine ;o)"
  echo "Bonne navigation ..."
else
  echo "Résultats : PROBLEME !"
  echo "la passerelle $gateway n'est pas fonctionnelle :"
  echo "Trinity ne réponds pas aux pings lui étant destinés."
  echo "Vérifier votre accès internet ..."
  echo
  echo ===========================
  echo "Fin du script $n_script"
  echo ===========================
  echo
  exit 0
fi
echo
echo ===========================
echo "Fin du script $n_script"
echo ===========================
echo


2.3. Script commenté


#!/bin/bash
# Mon premier script bash ;o)
# Fonction : Configuration automatique des paramètres IP d'un client situé derrière une passerelle,
# avec test de vérification.
# Utilisation : ./ip_home_ping
# Ce script doit être éxécuté en tant qu'utilisateur "root"
# Auteur : Laurent Moreau "Laurent.Moreau@ac-grenoble.fr"
# -----------------------------------------------------------
# 1) Déclaration des variables :
# -----------------------------------------------------------
declare ip_client=192.168.0.2
declare netmask=255.255.255.0
declare gateway=192.168.0.1
declare internet=195.221.234.11
declare n_script=ip_home
#------------------------------------------------------------
# 2) Changement des paramètres IP :
#------------------------------------------------------------
# On passe les paramètres IP pour l'interface eth0 :
/sbin/./ifconfig eth0 $ip_client netmask $netmask
# On supprime la route existante par défaut :
/sbin/./route del default
# On ajoute la nouvelle route par defaut :
/sbin/./route add default gateway $gateway
echo
#------------------------------------------------------------
# 3) Affichage des nouveaux paramètres IP :
#------------------------------------------------------------
echo ================================================
echo "Détails des nouveaux paramètres IP appliqués :"
echo ================================================
echo
echo "Nouvelle adresse IP = $ip_client"
echo "Masque de sous réseau = $netmask"
echo "Nouvelle route par défaut = $gateway"
echo
#------------------------------------------------------------
# 4) Phase de test
#------------------------------------------------------------
echo ================================
echo "Test des nouveaux paramètres :"
echo ================================
echo
echo "Envoie d'une série de 4 ping vers la nouvelle passerelle $gateway :"
echo
echo "... Veuillez patienter un instant ..."
# On ping la passerelle :
# "-c 4" => 4 ping, option "count"
# "-w 10 => avec un "time out" de 1o secondes, option "deadline"
# ">/dev/null => on n'affiche pas la sortie "standard", on la renvoie vers /dev/null
# "2>&1" =>  on n'affiche pas non plus la sortie "erreur", on la renvoie vers la sortie standard.
# Si on supprime ">/dev/null 2>&1" la commande sera affichée sur la console ...
ping -c 4 -w 10 $gateway >/dev/null 2>&1
# si le résultat de la commande ping = "0", on affiche le message : OK ...
if [ "$?" = "0" ]
then
  echo
  echo "Résultats : YES !"
  echo "la passerelle $gateway est accessible (côté intranet)"
# sinon (si le résultat de la commande ping = "1", on affiche le message : PROBLEME ...)
else
  echo
  echo "Résultats : PROBLEME !"
  echo "la passerelle $gateway n'est pas accessible (côté intranet)"
  echo "Vérifier votre connexion au réseau local ..."
  echo
  echo ===========================
  echo "Find du script $n_script"
  echo ===========================
  echo
  exit 0
fi
echo
echo "Envoie d'une série de 4 ping vers une machine internet (trinity) :"
echo
echo "... Veuillez patienter un instant ..."
echo
# On ping Trinity : (idem que la procédure de ping de la passerelle)
ping -c 4 -w 10 $internet >/dev/null 2>&1
if [ "$?" = "0" ]
then
  echo "Résultats : YES !"
  echo "la passerrelle $gateway est fonctionnelle :"
  echo "Trinity à correctement répondu à la série de 4 ping lui étant destinés."
  echo "votre accès internet est donc opérationnel depuis cette machine ;o)"
  echo "Bonne navigation ..."
else
  echo "Résultats : PROBLEME !"
  echo "la passerelle $gateway n'est pas fonctionnelle :"
  echo "Trinity ne réponds pas aux pings lui étant destinés."
  echo "Vérifier votre accès internet ..."
  echo
  echo ===========================
  echo "Find du script $n_script"
  echo ===========================
  echo
  exit 0
fi
echo
echo ===========================
echo "Find du script $n_script"
echo ===========================
echo


3. HOSTUP.bash

3.1. Objectif

Etre prévenu lorsqu'une machine est en ligne :

  • Prendre comme paramètre le nom de la machine
  • "ping" celle-ci jusqu'à ce qu'elle réponde
  • Afficher un message et un son lorsqu'elle est en ligne.

3.2. Script


#!/bin/bash
# Utilisation: ./hostup <nom_ou_ip_de_la_machine>
# Auteur : Bruno Bzeznik "bruno@ac-grenoble.fr"
SOUND="/usr/share/apps/korganizer/sounds/alert.wav"
FLAG=0
FLAG_ALERT=0
while [ "$FLAG" = "0" ]
do
  ping -c 1 -w 10 $1 >/dev/null 2>/dev/null
  if [ $? = 0 ]
  then
    if [ "$FLAG_ALERT" = "0" ]
    then
      xmessage "$1 ONLINE!" &
      PID_XMESSAGE=$!
      FLAG_ALERT=1
    fi
    # /usr/bin/sox $SOUND -t .au - > /dev/audio &
    play $SOUND
    PLAY_PID=$!
    sleep 30
    if [ "`ps $PID_XMESSAGE >/dev/null; echo $?`" = "1" ]
    then        
      FLAG="1"
    fi
  fi
  sleep 1
done