SlideShare une entreprise Scribd logo
Exercices shell scripts

  Entraînez-vous avec Bash (ou autres langages shell compatibles)

                    par Idriss NEUMANN (page personnelle)


                                Date de publication : 2009-12-13

                               Dernière mise à jour : 2012-04-25




Cet article regroupe des exercices corrigés en shell scripts Bash et autres langages
shell compatibles. Les exercices sont classés par niveaux et peuvent posséder plusieurs
solutions.

N'hésitez pas à proposer vos solutions où les énoncés via ce lien :
Exercices shell scripts par Idriss NEUMANN (page personnelle)


I - Niveau débutant...................................................................................................................................................... 3
     I-A - Exercice 1 - Appréciation de note................................................................................................................. 3
          I-A-1 - Énoncé...................................................................................................................................................3
          I-A-2 - Solution.................................................................................................................................................. 3
     I-B - Exercice 2 - Appréciation de note (v2)..........................................................................................................3
          I-B-1 - Énoncé...................................................................................................................................................3
          I-B-2 - Solution.................................................................................................................................................. 3
     I-C - Exercice 3 - Nombre élevé à sa propre puissance....................................................................................... 4
          I-C-1 - Énoncé...................................................................................................................................................4
          I-C-2 - Solution 1.............................................................................................................................................. 4
          I-C-3 - Solution 2.............................................................................................................................................. 5
II - Niveau intermédiaire.............................................................................................................................................. 5
     II-A - Exercice 1 - Appréciation de note (v3).........................................................................................................5
          II-A-1 - Énoncé..................................................................................................................................................5
          II-A-2 - Solution................................................................................................................................................. 5
     II-B - Exercice 2 - TestUser................................................................................................................................... 6
          II-B-1 - Énoncé..................................................................................................................................................6
          II-B-2 - Solution................................................................................................................................................. 6
     II-C - Exercice 3 - Calculatrice...............................................................................................................................7
          II-C-1 - Énoncé..................................................................................................................................................7
          II-C-2 - Solution.................................................................................................................................................7
     II-D - Exercice 4 - La factorielle.............................................................................................................................8
          II-D-1 - Énoncé..................................................................................................................................................8
          II-D-2 - Solution 1............................................................................................................................................. 8
          II-D-3 - Solution 2............................................................................................................................................. 9
     II-E - Exercice 5 - Les fichiers............................................................................................................................... 9
          II-E-1 - Énoncé..................................................................................................................................................9
          II-E-2 - Solution................................................................................................................................................. 9
     II-F - Exercice 6 - Tri à bulle............................................................................................................................... 10
          II-F-1 - Énoncé................................................................................................................................................ 10
          II-F-2 - Solution............................................................................................................................................... 10
     II-G - Exercice 7 - ls avec ordre inversé............................................................................................................. 11
          II-G-1 - Énoncé............................................................................................................................................... 11
          II-G-2 - Solution 1........................................................................................................................................... 11
          II-G-3 - Solution 2........................................................................................................................................... 11
          II-G-4 - Solution 3........................................................................................................................................... 12
          II-G-5 - Solution 4........................................................................................................................................... 12
          II-G-6 - Solution 5........................................................................................................................................... 12
III - Niveau confirmé.................................................................................................................................................. 13
     III-A - Exercice 1 - Fichier de notes.................................................................................................................... 13
          III-A-1 - Énoncé...............................................................................................................................................13
          III-A-2 - Solution.............................................................................................................................................. 13
     III-B - Exercice 2 - Liste d'utilisateurs.................................................................................................................. 13
          III-B-1 - Énoncé...............................................................................................................................................13
          III-B-2 - Solution.............................................................................................................................................. 14
     III-C - Exercice 3 - Convertisseur décimal/binaire............................................................................................... 14
          III-C-1 - Énoncé...............................................................................................................................................14
          III-C-2 - Solution 1.......................................................................................................................................... 15
          III-C-3 - Solution 2.......................................................................................................................................... 15
          III-C-4 - Solution 3.......................................................................................................................................... 16
     III-D - Exercice 4 - Moyenne de notes sur un fichier.......................................................................................... 16
          III-D-1 - Énoncé...............................................................................................................................................16
          III-D-2 - Solution 1.......................................................................................................................................... 16
          III-D-3 - Solution 2.......................................................................................................................................... 16
IV - Liens utiles..........................................................................................................................................................17
V - Remerciements.................................................................................................................................................... 17




                                                                       -2-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                                     http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)



    I - Niveau débutant

    I-A - Exercice 1 - Appréciation de note

    I-A-1 - Énoncé

Créer un script qui demande à l'utilisateur de saisir une note et qui affiche un message en fonction de cette note :

•       "très bien" si la note est entre 16 et 20 ;
•       "bien" lorsqu'elle est entre 14 et 16 ;
•       "assez bien" si la note est entre 12 et 14 ;
•       "moyen" si la note est entre 10 et 12 ;
•       "insuffisant" si la note est inférieur à 10.

    I-A-2 - Solution

Solution proposée par ok.Idriss :

    solution exercice 1
     #!/bin/bash

     echo "Entrez votre note :"
     read note

     if [ $note -ge 16 ]
     then
          echo "très bien"
     elif [ $note -ge 14 ]
     then
          echo "bien"
     elif [ $note -ge 12 ]
     then
          echo "assez bien"
     elif [ $note -ge 10 ]
     then
          echo "moyen"
     else
          echo "insuffisant"
     fi


    I-B - Exercice 2 - Appréciation de note (v2)

    I-B-1 - Énoncé

Reprenez l'exercice 1 et faites en sorte que le programme se répète tant que l'utilisateur n'a pas saisi une note
négative ou 'q' (pour quitter).
Le script doit calculez le nombre de notes de saisies et en faire la moyenne tout à la fin.

    I-B-2 - Solution

Solution proposée par ok.Idriss :

    solution exercice 2
     #!/bin/bash

     note=0


                                                                       -3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 2
  moyenne=0
  i=0

  until [ $note -lt 0 ]
  do
      echo "Entrez votre note (q pour quitter) :"
      read note
      if [ $note = "q" ]
      then
           note=-1
          echo "au revoir !"
      elif [ $note -ge 16 ]
      then
          echo "très bien"
      elif [ $note -ge 14 ]
      then
          echo "bien"
      elif [ $note -ge 12 ]
      then
          echo "assez bien"
      elif [ $note -ge 10 ]
      then
          echo "moyen"
      elif [ $note -ge 0 ]
      then
          echo "insuffisant"
      else
          echo "au revoir !"
      fi

         if [ $note -ge 0 ]
         then
             let moyenne=$moyenne+$note
             let i=$i+1
         fi
  done

  if [ $i -le 0 ]
  then
       let i=1
  fi

  let moyenne=$moyenne/$i
  echo "La moyenne est de $moyenne ($i notes)"


 I-C - Exercice 3 - Nombre élevé à sa propre puissance

 I-C-1 - Énoncé

Créer un script qui prend un nombre en saisie et l'élève à sa propre puissance. C'est un peu le même principe que
la factorielle mais cette fois, l'usage de la boucle for est imposé.

Exemple d'exécution :

  [ ~] ./NomDuScript.sh
  Saisir une valeur :
  4
  2^2 = 4


 I-C-2 - Solution 1

Solution proposée par ok.Idriss :


                                                                       -4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 Solution 1 exercice 3
  #!/bin/bash
  echo "Saisir une valeur"
  read value
  result=1
  for (( i=0 ; i<$value ; i++ ))
  do
       let result=$result*$value
  done
  echo "$value^$value = $result


 I-C-3 - Solution 2

Solution proposée par ok.Idriss :

 solution 2 exercice 3
  #!/bin/bash

  operation ()
  {
      result=1
      for (( i=0 ; i<$value ; i++ ))
      do
          let result=$result*$value
      done
      echo "$value^$value = $result"
  }

  if [ $# -eq 0 ]
  then
       echo "Saisir une valeur"
       read value
  else
       value=$1
  fi
  operation


 II - Niveau intermédiaire

 II-A - Exercice 1 - Appréciation de note (v3)

 II-A-1 - Énoncé

Reprenez uniquement la version 1 de l'exercice. La note devra être donnée en paramètre ou bien saisie en cas
d'absences d'arguments. La comparaison de la note devra être faite dans une fonction appreciation().

 II-A-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 1
  #!/bin/bash

  appreciation ()
  {
      if [ $note -ge 16 ]
      then
          echo "très bien"
      elif [ $note -ge 14 ]
      then



                                                                       -5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 1
            echo "bien"
        elif [ $note -ge 12 ]
        then
            echo "assez bien"
        elif [ $note -ge 10 ]
        then
            echo "moyen"
        else
            echo "insuffisant"
        fi
  }

  # programme principal
  clear
  if [ $# -ne 0 ]
  then
       note=$1
  else
       echo "Saisir une note"
       read note
  fi
  appreciation


 II-B - Exercice 2 - TestUser

 II-B-1 - Énoncé

Créer un script qui vous propose le menu suivant :

  1 - Vérifier l'existence d'un utilisateur
  2 - Connaître l'UID d'un utilisateur
  q - Quitter


L'utilisateur devra être saisi, à l'aide d'une fonction. Son existence devra être vérifiée à l'aide d'une autre fonction.

 II-B-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 2
  #!/bin/bash

  function pause
  {
      echo "Appuyez sur ENTER pour continuer"
      read
  }

  function saisirUser
  {
      echo "Saisir l'utilisateur"
      read util
  }

  function verifyUser
  {
      if grep "^$util:" /etc/passwd > /dev/null
      then
          echo "L'utilisateur existe"
      else
          echo "L'utilisateur n'existe pas"
      fi
      pause


                                                                       -6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 2
  }

  rep=1
  while [ $rep -eq 1 ]
  do
      clear
      printf "menu :nn"
      echo "1. Vérifier lexistence d'un utilisateur
      echo 2. Connaître l'UID d'un utilisateur
      echo -e 3. Quittern
      read choix
      case $choix in
          1)
              saisirUser
              verifyUser ;;

                2)
                     saisirUser
                     id $util
                     pause ;;

             q)
                     echo Au revoir
                     pause
                     rep=0 ;;
             *)
                     echo Erreur de saisie
                     pause ;;
         esac
  done


 II-C - Exercice 3 - Calculatrice

 II-C-1 - Énoncé

Créer un script dans lequel deux nombres opérandes et un signe opérateur (+-*/) devront être donnés en paramètres,
ou saisis en cas d'absence. Le script doit réaliser l'opération souhaitée.

Exemple :

  [ ~] ./calculette.sh 7 + 4
  Le résultat est : 11


Le calcul devra être fait à l'aide d'une fonction calcul ().

 II-C-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 3
  #!/bin/bash

  saisir ()
  {
      printf Saisir le premier nombre, puis le signe de l'opération puis le deuxième nombre :nn
      read nb1
      read s
      read nb2
  }

  calcul ()
  {


                                                                       -7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 3
        case $s in
             +) let result=$nb1+$nb2 ;;
             -) let result=$nb1-$nb2 ;;
             *) let result=$nb1*$nb2 ;;
             /) let result=$nb1/$nb2 ;;
            *)
                 let result=0
                 echo -e Erreur de saisie !nLe résultat est faux.;;
        esac
  }

  calcul2 ()
  {
      let result=$nb1$s$nb2
  }

  if [ $# -eq 3 ]
  then
       nb1=$1 ; s=$2 ; nb2=$3
  else
       saisir
  fi
  calcul
  echo Le résultat est $result
  calcul2
  echo Calculé d'une autre façon : $result


 II-D - Exercice 4 - La factorielle

 II-D-1 - Énoncé

Créer un script qui permet de calculer et d'afficher la factorielle d'un nombre donné en paramètre (ou saisi en cas
d'absence de paramètres).

 II-D-2 - Solution 1

Solution proposée par ok.Idriss :

 solution 1 exercice 4
  #!/bin/bash

  if [ $# -eq 0 ]
  then
       echo Saisir une valeur : 
       read val
  else
       val=$1
  fi

  # Dans le cas où c'est négatif, on rend la valeur positive
  if [ $val -lt 0 ]
  then
       let val=-1*$val
  fi

  result=1
  val2=$val

  while [ $val -ne 0 ]
  do
      printf $val 
      let result=$result*$val
      let val=$val-1



                                                                       -8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution 1 exercice 4
         if [ $val -ne 0 ]
         then
             printf * 
         fi
  done

  echo = $result


 II-D-3 - Solution 2

Solution proposée par Sve@r :

 solution 2 exercice 2
  #!/bin/sh

  if test $# -eq 0
  then
       echo Saisissez une valeur correcte
       read val
       set -- $val
  fi

  nb=${nb:-$1}
  res=${res:-1}
  if test $nb -eq 0
  then
       echo $res
       exit
  fi

  res=`expr $res * $nb`
  nb=`expr $nb - 1`
  . $0


 II-E - Exercice 5 - Les fichiers

 II-E-1 - Énoncé

Créer un script qui doit calculer le nombre de fichiers standard, de sous-répertoires, et d'exécutables d'un répertoire
quelconque qui sera donné en paramètre (ou saisis en cas d'absence du paramètre).

 II-E-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 5
  #!/bin/bash

  j=0
  k=0
  l=0

  if [ $# -eq 0 ]
  then
       echo Saisir le répertoire
       read rep
  else
       rep=$1
  fi




                                                                       -9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 5
  cd $rep

  for i in *
  do
       if [ -d $i ]
       then
           echo $i
           let j=$j+1
       fi
       if [ -f $i ]
       then
           echo $i
           let k=$k+1
       fi
       if [ -x $i ]
       then
           echo $i
           let l=$l+1
       fi
  done
  echo Il y a $j répertoires, $k fichiers et $l exécutables dans $rep


 II-F - Exercice 6 - Tri à bulle

 II-F-1 - Énoncé

Créer un script qui devra enregistrer à l'aide d'un tableau, un nombre d'entiers donné en paramètre (ou en saisie)
puis trier ceux-ci dans l'ordre croissant dans ce même tableau (sans passer par un autre) et enfin afficher le contenu
du tableau (ordonné) sur la sortie standard.

 II-F-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 6
  #!/bin/bash

  if [ $# -lt 1 ]
  then
       echo Saisir le nombre d'éléments à ordonner
       read SIZE
  else
       SIZE=$1
  fi

  echo Saisir les éléments :

  for (( i=0 ; iSIZE ; i++ ))
  do
       read tab[i]
  done

  for (( i=0 ; iSIZE ; i++ ))
  do
      for (( j=$i+1 ; jSIZE ; j++ ))
      do
           if [ ${tab[j]} -le ${tab[i]} ]
           then
               tampon=${tab[i]}
               tab[i]=${tab[j]}
               tab[j]=$tampon
           fi
      done


                                                                      - 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution exercice 6
  done

  echo Valeurs ordonnées :

  for (( i=0 ; iSIZE ; i++ ))
  do
       echo ${tab[i]}
  done


 II-G - Exercice 7 - ls avec ordre inversé

 II-G-1 - Énoncé

Créer un script qui renvoie la même sortie que la commande ls mais dans l'ordre décroissant (autrement dit : le
script devra lister le contenu d'un répertoire dans l'ordre décroissant). Vous ne devez ni vous servir de la commande
ls, ni de la commande sort.

 II-G-2 - Solution 1

Solution proposée par ok.Idriss :

 solution 1 exercice 7
  #!/bin/bash

  # Si on a au moins un paramètre et que le premier paramètre est un répertoire
  if [ $# -ge 1 ]  [ -d $1 ]
  then
       cd $1
  fi

  nb=0

  for fichier in *
  do
       tab[$nb]=$fichier
       let nb=$nb+1
  done

  # affichage inversé
  for (( i=$nb ; i=0 ; i=$i-1 ))
  do
       echo ${tab[$i]}
  done


 II-G-3 - Solution 2

Solution proposée par becket :

 solution 2 exercice 7
  #!/bin/bash

  listing=( * )

  for (( i=${#listing[@]}-1 ; i = 0 ; i=i-1 ))
  do
       echo ${listing[$i]}
  done




                                                                      - 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)



 II-G-4 - Solution 3

Solution proposée par N_Bah :

 solution 3 exercice 7
  #!/bin/bash

  read -p' Entrez le nom du répertoire : ' repertoire

  if [ -d $repertoire ]
  then [[ $repertoire != */ ]]  repertoire=${repertoire:+$repertoire/}
       shopt -s nullglob #sinon repertoireVide/*, retournera repertoireVide/*
       fichiers=( ${repertoire}* )
       ((${#fichiers[@]}))  {
          for (( x=${#fichiers[@]}-1; x=0; x-- ))
          do echo ${fichiers[x]}
          done
       } || echo $repertoire est vide
  else echo $repertoire n'est pas un répertoire
  fi


 II-G-5 - Solution 4

Solution proposée par chardclo :

 solution 4 exercice 7
  #!/bin/bash
  read -p' Entrez le        nom du répertoire : ' repertoire
  [ -d ${repertoire}        ] || {
    printf %s n'est        pas un nom de dossier valide. ${repertoire}
    exit 1
  }
  compgen -o default        ${repertoire}/ | tac


 II-G-6 - Solution 5

Solution proposée par chardclo :

 solution 5 exercice 7
  #!/bin/bash
  read -p' Entrez le nom du répertoire : ' repertoire
  [ -d ${repertoire} ] || {
    printf %s n'est pas un nom de dossier valide.n ${repertoire}
    exit 1
  }

  text=
  while read
  do
     text=${REPLY}n${text}
  done  (compgen -o default ${repertoire}/)

  [[ ${text} ]]  printf ${text} || printf le dossier %s est vide.n ${repertoire}




                                                                      - 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)



 III - Niveau confirmé

 III-A - Exercice 1 - Fichier de notes

 III-A-1 - Énoncé

Créer un script qui va devra exploiter les données d'un fichier de notes que vous aller créer au préalable dans le
même répertoire que le script.
Ce fichier sera appelé FichierNote et devra se présenter comme ceci :

  Dupont François 12
  Durand Françoise 8
  Dujardin Nicole 14


Le script devra afficher les lignes dans lesquelles la note est supérieure ou égale à 10. Si le fichier est vide, il devra
quitter (donc ne pas boucler indéfiniment).

Exemple :

 solution exercice 1
  [ ~] ./NomDuScript
  Dupont        François                   12
  Dujardin Nicole        14
  [ ~] rm FichierNote
  [ ~] touch FichierNote
  [ ~] ./NomDuScript
  [ ~]


 III-A-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 1
  #!/bin/bash

  cat    FichierNote | while read ligne
  do
        set -- $ligne
        if [ $3 -ge 10 ]
        then
            echo $ligne
        fi
  done


 III-B - Exercice 2 - Liste d'utilisateurs

 III-B-1 - Énoncé

Créer un script qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des
lignes comme ceci : Login + Tabulation + Nom + Tabulation + Prénom.

Exemple :

  dupontf Dupont François
  fdurand Durand Françoise
  nicoled Dujardin Nicole


                                                                      - 13 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


Le script devra vérifier, à l'aide d'une fonction, l'existence des utilisateurs enregistrés dans le fichier. Admettons, par
exemple, que seul Dupont François soit un utilisateur et que le fichier se nomme ~/Documents/FichierUser, le script
devra s'exécuter comme ceci :

  [ ~] ./NomDuScript ~/Doucuments/FichierUser
  dupontf        Dupont        François
  [ ~] ./NomDuScript
  Saisissez le fichier à traiter :
  ~/Documents/UserFichier
  Le fichier n'existe pas.
  [ ~]


Le script devra donc, au préalable, vérifier l'existence du fichier avant de comparer son contenu au fichier /etc/passwd.
Le script devra également quitter la boucle si le fichier est vide.

 III-B-2 - Solution

Solution proposée par ok.Idriss :

 solution exercice 2
  #!/bin/bash

  TestUser ()
  {
      if grep ^$util: /etc/passwd  /dev/null
      then
          echo $ligne
      fi
  }

  if [ $# -eq 0 ]
  then
       echo Chemin et nom du fichier :
       read fichier
  else
       fichier=$1
  fi

  if [ -e $fichier ]
  then
       cat $fichier | while read ligne
       do
           set -- $ligne
            util=$1
           TestUser
       done
  else
       echo Le fichier $fichier n'existe pas.
  fi


 III-C - Exercice 3 - Convertisseur décimal/binaire

 III-C-1 - Énoncé

Créer un script qui prend en paramètre (ou en saisie en cas d'absence de paramètres) une valeur décimale et qui
doit la convertir en binaire.
Vous devez travailler sur 8 bits et chaque bit devra être contenu dans une case d'un tableau mono-dimensionnel et
à la fin on affiche toutes les cases de ce tableau pour avoir la valeur en binaire lisible de droite à gauche, à partir
de la valeur décimale saisie au départ.




                                                                      - 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)



 III-C-2 - Solution 1

Solution proposée par ok.Idriss :

 solution 1 exercice 3
  #!/bin/bash

  MaxBits=8

  pow ()
  {
      value2=1
      for (( k=1 ; k$i ; k ++ ))
      do
          let value2=$value2*2
      done
  }

  if [ $# -eq 0 ]
  then
       echo Saisir une valeur décimale
       read value
  else
       value=$1
  fi

  declare -a bin

  j=0
  for (( i=$MaxBits ; i=0 ; i-- ))
  do
       pow
       if [ $value -ge $value2 ]
       then
           bin[j]=1
           let value=$value-$value2
       else
           bin[j]=0
       fi
       let j=$j+1
  done

  printf La valeur binaire est de : 
  for (( i=0 ; i$MaxBits ; i++ ))
  do
       printf ${bin[i]}
  done
  echo 


 III-C-3 - Solution 2

Solution proposée par becket :

 solution 2 exercie 3
  #!/bin/bash

  unset resultat
  echo Entrez une valeur a convertir : 
  read i
  for (( cpt=8 ; $cpt  1 ; cpt-- ))
  do
          let resultat[$cpt]=$i  1
          let i=i = 1
  done
  echo ${resultat[@]}



                                                                      - 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)



 III-C-4 - Solution 3

Solution proposée par chardclo :

 solution 3 exercice 3
  #!/bin/bash
  unset res
  dec=$1
  [[ $dec ]] || read -p Entrez une valeur a convertir :  dec
  while :
  do
     res[dec]=$((dec  1))
     ((dec=1 )) || break
  done
  echo ${res[@]}


 III-D - Exercice 4 - Moyenne de notes sur un fichier

 III-D-1 - Énoncé

Créer un script qui prend en paramètre ou en saisie le nom d'un fichier contenant le nom des élèves et leurs trois
notes. Le script devra : afficher les noms des élèves, puis calculer et afficher la moyenne de chaque élève
Voici comment se présente le fichier :

  Durand 12 9 14
  Lucas 8 11 4
  Martin 9 12 1


 III-D-2 - Solution 1

Solution proposée par ok.Idriss :

 solution 1 exercice 4
  #!/bin/bash

  if [ $# -lt 1 ]
  then
       echo Saisir le nom du fichier
       read fichier
  else
       fichier=$1
  fi

  cat $fichier | while read ligne
  do
       set -- $ligne
       let moyenne=($2+$3+$4)/3
       echo L'élève $1 a pour moyenne $moyenne
  done


 III-D-3 - Solution 2

Solution proposée par N_Bah :

 solution 2 exercice 4
  #!/bin/bash

  moyenne() {
     declare -i somme


                                                                      - 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                            http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
Exercices shell scripts par Idriss NEUMANN (page personnelle)


 solution 2 exercice 4
      for i in $@; do somme+=$i; done
      echo $((somme / ${#@}))
  }

  [ -f $1 ]  fichier=$1 || read -ep'Entrez le nom du fichier qui contient les données : ' fichier

  while read nom notes
  do echo -n $nom                 : 
     moyenne $notes
  done  $fichier


 IV - Liens utiles

Quelques liens utiles permettant d'acquérir de bonnes bases :

Advanced Bash-Scripting Guide (traduction)

Présentation et cours Korn Shell (compatible avec le Bash)

 V - Remerciements

Je souhaite remercier tous les contributeurs qui m'ont aidé à enrichir cet article par des exercices et/ou des solutions.
Il s'agit en l'occurrence de becket, chardclo, N_Bah et Sve@r merci à eux.

Je tiens également à remercier LittleWhite et paissad pour leur relecture technique et leurs conseils.

Je tiens enfin à remercier jacques_jean pour son effort de relecture orthographique.




                                                                      - 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce
site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi
jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD.
                                             http://ineumann.developpez.com/tutoriels/linux/exercices-shell/

Contenu connexe

Tendances

Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Mohammed JAITI
 
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Saadaoui Marwen
 
Asd1
Asd1Asd1
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
Faycel Chaoua
 
Composants et fonctionnement d'un Switch Cisco
Composants et fonctionnement d'un Switch Cisco Composants et fonctionnement d'un Switch Cisco
Composants et fonctionnement d'un Switch Cisco
DJENNA AMIR
 
Rapport de pfe gestion de parc informatique et Helpdesk
Rapport de pfe gestion de parc informatique et HelpdeskRapport de pfe gestion de parc informatique et Helpdesk
Rapport de pfe gestion de parc informatique et Helpdesk
Raef Ghribi
 
Projet de fin d'etude sur le parc informatique
Projet  de fin d'etude sur le parc informatiqueProjet  de fin d'etude sur le parc informatique
Projet de fin d'etude sur le parc informatique
Hicham Ben
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
Amir Souissi
 
Etude et mise en place d’une solution open source de gestion de la sécurité d...
Etude et mise en place d’une solution open source de gestion de la sécurité d...Etude et mise en place d’une solution open source de gestion de la sécurité d...
Etude et mise en place d’une solution open source de gestion de la sécurité d...
Mohammed LAAZIZLI
 
Gateway d’un système de monitoring
Gateway d’un système de monitoringGateway d’un système de monitoring
Gateway d’un système de monitoring
Ghassen Chaieb
 
La virtualisation
La virtualisationLa virtualisation
La virtualisation
Juvénal CHOKOGOUE
 
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
safwenbenfredj
 
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
fehmi arbi
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammami
Donia Hammami
 
Rapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben SlimaRapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben Slima
Ilef Ben Slima
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseau
denischef1
 
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
Abderrahmane Belhimer
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locaux
Ines Kechiche
 
PFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignementPFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignement
Nassim Bahri
 
Support du cours : Systèmes d'exploitation 2 (linux)
Support du cours : Systèmes d'exploitation 2 (linux)Support du cours : Systèmes d'exploitation 2 (linux)
Support du cours : Systèmes d'exploitation 2 (linux)
Faycel Chaoua
 

Tendances (20)

Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
 
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
Rapport PFE ingénieur réseaux marwen SAADAOUI ( Juin 2018 )
 
Asd1
Asd1Asd1
Asd1
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
Composants et fonctionnement d'un Switch Cisco
Composants et fonctionnement d'un Switch Cisco Composants et fonctionnement d'un Switch Cisco
Composants et fonctionnement d'un Switch Cisco
 
Rapport de pfe gestion de parc informatique et Helpdesk
Rapport de pfe gestion de parc informatique et HelpdeskRapport de pfe gestion de parc informatique et Helpdesk
Rapport de pfe gestion de parc informatique et Helpdesk
 
Projet de fin d'etude sur le parc informatique
Projet  de fin d'etude sur le parc informatiqueProjet  de fin d'etude sur le parc informatique
Projet de fin d'etude sur le parc informatique
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
 
Etude et mise en place d’une solution open source de gestion de la sécurité d...
Etude et mise en place d’une solution open source de gestion de la sécurité d...Etude et mise en place d’une solution open source de gestion de la sécurité d...
Etude et mise en place d’une solution open source de gestion de la sécurité d...
 
Gateway d’un système de monitoring
Gateway d’un système de monitoringGateway d’un système de monitoring
Gateway d’un système de monitoring
 
La virtualisation
La virtualisationLa virtualisation
La virtualisation
 
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
 
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux Rapport pfe 2017 Système de gestion des rendez-vous médicaux
Rapport pfe 2017 Système de gestion des rendez-vous médicaux
 
Rapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammamiRapport pfe talan_2018_donia_hammami
Rapport pfe talan_2018_donia_hammami
 
Rapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben SlimaRapport PFE Ilef Ben Slima
Rapport PFE Ilef Ben Slima
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseau
 
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
Mémoire de fin d'études. Modules: SI Helpdesk , Gestion Park informatique , B...
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locaux
 
PFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignementPFE :: Application de gestion des dus d'enseignement
PFE :: Application de gestion des dus d'enseignement
 
Support du cours : Systèmes d'exploitation 2 (linux)
Support du cours : Systèmes d'exploitation 2 (linux)Support du cours : Systèmes d'exploitation 2 (linux)
Support du cours : Systèmes d'exploitation 2 (linux)
 

En vedette

Administration reseau web debian & ubuntu
Administration reseau web debian & ubuntuAdministration reseau web debian & ubuntu
Administration reseau web debian & ubuntuulratique
 
Https,ssl,ssh
Https,ssl,sshHttps,ssl,ssh
Https,ssl,ssh
Moncef Essid
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 
Serveur web sur lindux debian
Serveur web sur lindux debianServeur web sur lindux debian
Serveur web sur lindux debian
charlielefebvre14
 
Magnifiques créations en bois
Magnifiques créations en boisMagnifiques créations en bois
Magnifiques créations en boisSaqqarah 31
 
ETS
ETSETS
ETS
At Home
 
PSR Document de consultation
PSR Document de consultationPSR Document de consultation
PSR Document de consultation
equipesimbal
 
Cocido andaluz 2012
Cocido andaluz 2012Cocido andaluz 2012
Cocido andaluz 2012
cosasdeandalucia
 
¿Qué podemos aprender de amazon.com? por Gabriela Roncal
¿Qué podemos aprender de amazon.com? por Gabriela Roncal¿Qué podemos aprender de amazon.com? por Gabriela Roncal
¿Qué podemos aprender de amazon.com? por Gabriela Roncal
Neo Consulting
 
Dynamiser le télétravail
Dynamiser le télétravailDynamiser le télétravail
Dynamiser le télétravail
Ministère de l'Économie et des Finances
 
Actescolloquevieillissement cas juin2011
Actescolloquevieillissement cas juin2011Actescolloquevieillissement cas juin2011
Actescolloquevieillissement cas juin2011
Ministère de l'Économie et des Finances
 
El príncipe de maquiavelo. Iker lópez
El príncipe de maquiavelo. Iker lópezEl príncipe de maquiavelo. Iker lópez
El príncipe de maquiavelo. Iker lópez
rufasanchez
 
Presentación: Ligia Bolívar, Derechos Humanos
Presentación: Ligia Bolívar, Derechos HumanosPresentación: Ligia Bolívar, Derechos Humanos
Presentación: Ligia Bolívar, Derechos Humanos
Espacio Público
 
EL ARTE EN LA ERA DEL TABLET
EL ARTE EN LA ERA DEL TABLETEL ARTE EN LA ERA DEL TABLET
EL ARTE EN LA ERA DEL TABLET
ALEXANDRA JULIA ERN
 
Soirée Communication Engageante- Témoignage de High Connexion
Soirée Communication Engageante- Témoignage de High ConnexionSoirée Communication Engageante- Témoignage de High Connexion
Soirée Communication Engageante- Témoignage de High ConnexionLabel_LOVED
 
Web con Concepto
Web con ConceptoWeb con Concepto
Web con Concepto
Luis Palomino
 
Présentation finale 20112012
Présentation finale 20112012Présentation finale 20112012
Présentation finale 20112012Juliane Boistel
 
Semana santa mar_del_plata
Semana santa mar_del_plataSemana santa mar_del_plata
Semana santa mar_del_plata
cosasdeandalucia
 

En vedette (20)

Tp switch
Tp switchTp switch
Tp switch
 
Administration reseau web debian & ubuntu
Administration reseau web debian & ubuntuAdministration reseau web debian & ubuntu
Administration reseau web debian & ubuntu
 
Https,ssl,ssh
Https,ssl,sshHttps,ssl,ssh
Https,ssl,ssh
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Serveur web sur lindux debian
Serveur web sur lindux debianServeur web sur lindux debian
Serveur web sur lindux debian
 
Magnifiques créations en bois
Magnifiques créations en boisMagnifiques créations en bois
Magnifiques créations en bois
 
ETS
ETSETS
ETS
 
Annee 2010
Annee 2010Annee 2010
Annee 2010
 
PSR Document de consultation
PSR Document de consultationPSR Document de consultation
PSR Document de consultation
 
Cocido andaluz 2012
Cocido andaluz 2012Cocido andaluz 2012
Cocido andaluz 2012
 
¿Qué podemos aprender de amazon.com? por Gabriela Roncal
¿Qué podemos aprender de amazon.com? por Gabriela Roncal¿Qué podemos aprender de amazon.com? por Gabriela Roncal
¿Qué podemos aprender de amazon.com? por Gabriela Roncal
 
Dynamiser le télétravail
Dynamiser le télétravailDynamiser le télétravail
Dynamiser le télétravail
 
Actescolloquevieillissement cas juin2011
Actescolloquevieillissement cas juin2011Actescolloquevieillissement cas juin2011
Actescolloquevieillissement cas juin2011
 
El príncipe de maquiavelo. Iker lópez
El príncipe de maquiavelo. Iker lópezEl príncipe de maquiavelo. Iker lópez
El príncipe de maquiavelo. Iker lópez
 
Presentación: Ligia Bolívar, Derechos Humanos
Presentación: Ligia Bolívar, Derechos HumanosPresentación: Ligia Bolívar, Derechos Humanos
Presentación: Ligia Bolívar, Derechos Humanos
 
EL ARTE EN LA ERA DEL TABLET
EL ARTE EN LA ERA DEL TABLETEL ARTE EN LA ERA DEL TABLET
EL ARTE EN LA ERA DEL TABLET
 
Soirée Communication Engageante- Témoignage de High Connexion
Soirée Communication Engageante- Témoignage de High ConnexionSoirée Communication Engageante- Témoignage de High Connexion
Soirée Communication Engageante- Témoignage de High Connexion
 
Web con Concepto
Web con ConceptoWeb con Concepto
Web con Concepto
 
Présentation finale 20112012
Présentation finale 20112012Présentation finale 20112012
Présentation finale 20112012
 
Semana santa mar_del_plata
Semana santa mar_del_plataSemana santa mar_del_plata
Semana santa mar_del_plata
 

Similaire à Exercices shell

Initiation langage-c
Initiation langage-cInitiation langage-c
Initiation langage-cYasser Rabi
 
champ
champchamp
Introduction à Opencart
Introduction à OpencartIntroduction à Opencart
Introduction à Opencartmedfa
 
Exercice pro-et-deontologie-20132
Exercice pro-et-deontologie-20132Exercice pro-et-deontologie-20132
Exercice pro-et-deontologie-20132
Med Bijou
 
INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE HINDOUSSATI
 
Mémoire fin d'étude gestion des interventions
Mémoire fin d'étude gestion des interventionsMémoire fin d'étude gestion des interventions
Mémoire fin d'étude gestion des interventions
Mohamed Arar
 
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
mouafekmazia
 
Conception d’un balanced scorecard
Conception d’un balanced scorecard Conception d’un balanced scorecard
Conception d’un balanced scorecard
Hassan Elalami
 
initiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corrigesinitiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corriges
jojo sekkat
 
Analyse numérique
Analyse numériqueAnalyse numérique
Analyse numérique
imane lahjouji
 
reseaux et systemes avances
 reseaux et systemes avances reseaux et systemes avances
reseaux et systemes avances
mohamednacim
 
Bi methodes agiles
Bi methodes agilesBi methodes agiles
Bi methodes agiles
youssef222
 
Course outline p6
Course outline p6Course outline p6
Course outline p6Kazim Naqvi
 
gestion de notariat avec openerp
gestion de notariat avec openerpgestion de notariat avec openerp
gestion de notariat avec openerp
HORIYASOFT
 
B4 tab calc excel
B4 tab calc excelB4 tab calc excel
B4 tab calc excel
vangogue
 

Similaire à Exercices shell (20)

Initiation langage-c
Initiation langage-cInitiation langage-c
Initiation langage-c
 
champ
champchamp
champ
 
Introduction à Opencart
Introduction à OpencartIntroduction à Opencart
Introduction à Opencart
 
Exercice pro-et-deontologie-20132
Exercice pro-et-deontologie-20132Exercice pro-et-deontologie-20132
Exercice pro-et-deontologie-20132
 
Bureautique
BureautiqueBureautique
Bureautique
 
INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE INFORMATIQUE DES GESTION : MERISE
INFORMATIQUE DES GESTION : MERISE
 
Mémoire fin d'étude gestion des interventions
Mémoire fin d'étude gestion des interventionsMémoire fin d'étude gestion des interventions
Mémoire fin d'étude gestion des interventions
 
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
Rapport Projet De Fin D'étude de Conception et développement d’une applicatio...
 
Conception d’un balanced scorecard
Conception d’un balanced scorecard Conception d’un balanced scorecard
Conception d’un balanced scorecard
 
initiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corrigesinitiation-au-langage-c-et-exercices-corriges
initiation-au-langage-c-et-exercices-corriges
 
Analyse numérique
Analyse numériqueAnalyse numérique
Analyse numérique
 
reseaux et systemes avances
 reseaux et systemes avances reseaux et systemes avances
reseaux et systemes avances
 
9782212127829
97822121278299782212127829
9782212127829
 
Jmetertest
JmetertestJmetertest
Jmetertest
 
Pmbok methodes agiles
Pmbok methodes agilesPmbok methodes agiles
Pmbok methodes agiles
 
Bi methodes agiles
Bi methodes agilesBi methodes agiles
Bi methodes agiles
 
Course outline p6
Course outline p6Course outline p6
Course outline p6
 
gestion de notariat avec openerp
gestion de notariat avec openerpgestion de notariat avec openerp
gestion de notariat avec openerp
 
B4 tab calc excel
B4 tab calc excelB4 tab calc excel
B4 tab calc excel
 
INITIATION_PHP_NAB_2009
INITIATION_PHP_NAB_2009INITIATION_PHP_NAB_2009
INITIATION_PHP_NAB_2009
 

Dernier

OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 

Dernier (6)

OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 

Exercices shell

  • 1. Exercices shell scripts Entraînez-vous avec Bash (ou autres langages shell compatibles) par Idriss NEUMANN (page personnelle) Date de publication : 2009-12-13 Dernière mise à jour : 2012-04-25 Cet article regroupe des exercices corrigés en shell scripts Bash et autres langages shell compatibles. Les exercices sont classés par niveaux et peuvent posséder plusieurs solutions. N'hésitez pas à proposer vos solutions où les énoncés via ce lien :
  • 2. Exercices shell scripts par Idriss NEUMANN (page personnelle) I - Niveau débutant...................................................................................................................................................... 3 I-A - Exercice 1 - Appréciation de note................................................................................................................. 3 I-A-1 - Énoncé...................................................................................................................................................3 I-A-2 - Solution.................................................................................................................................................. 3 I-B - Exercice 2 - Appréciation de note (v2)..........................................................................................................3 I-B-1 - Énoncé...................................................................................................................................................3 I-B-2 - Solution.................................................................................................................................................. 3 I-C - Exercice 3 - Nombre élevé à sa propre puissance....................................................................................... 4 I-C-1 - Énoncé...................................................................................................................................................4 I-C-2 - Solution 1.............................................................................................................................................. 4 I-C-3 - Solution 2.............................................................................................................................................. 5 II - Niveau intermédiaire.............................................................................................................................................. 5 II-A - Exercice 1 - Appréciation de note (v3).........................................................................................................5 II-A-1 - Énoncé..................................................................................................................................................5 II-A-2 - Solution................................................................................................................................................. 5 II-B - Exercice 2 - TestUser................................................................................................................................... 6 II-B-1 - Énoncé..................................................................................................................................................6 II-B-2 - Solution................................................................................................................................................. 6 II-C - Exercice 3 - Calculatrice...............................................................................................................................7 II-C-1 - Énoncé..................................................................................................................................................7 II-C-2 - Solution.................................................................................................................................................7 II-D - Exercice 4 - La factorielle.............................................................................................................................8 II-D-1 - Énoncé..................................................................................................................................................8 II-D-2 - Solution 1............................................................................................................................................. 8 II-D-3 - Solution 2............................................................................................................................................. 9 II-E - Exercice 5 - Les fichiers............................................................................................................................... 9 II-E-1 - Énoncé..................................................................................................................................................9 II-E-2 - Solution................................................................................................................................................. 9 II-F - Exercice 6 - Tri à bulle............................................................................................................................... 10 II-F-1 - Énoncé................................................................................................................................................ 10 II-F-2 - Solution............................................................................................................................................... 10 II-G - Exercice 7 - ls avec ordre inversé............................................................................................................. 11 II-G-1 - Énoncé............................................................................................................................................... 11 II-G-2 - Solution 1........................................................................................................................................... 11 II-G-3 - Solution 2........................................................................................................................................... 11 II-G-4 - Solution 3........................................................................................................................................... 12 II-G-5 - Solution 4........................................................................................................................................... 12 II-G-6 - Solution 5........................................................................................................................................... 12 III - Niveau confirmé.................................................................................................................................................. 13 III-A - Exercice 1 - Fichier de notes.................................................................................................................... 13 III-A-1 - Énoncé...............................................................................................................................................13 III-A-2 - Solution.............................................................................................................................................. 13 III-B - Exercice 2 - Liste d'utilisateurs.................................................................................................................. 13 III-B-1 - Énoncé...............................................................................................................................................13 III-B-2 - Solution.............................................................................................................................................. 14 III-C - Exercice 3 - Convertisseur décimal/binaire............................................................................................... 14 III-C-1 - Énoncé...............................................................................................................................................14 III-C-2 - Solution 1.......................................................................................................................................... 15 III-C-3 - Solution 2.......................................................................................................................................... 15 III-C-4 - Solution 3.......................................................................................................................................... 16 III-D - Exercice 4 - Moyenne de notes sur un fichier.......................................................................................... 16 III-D-1 - Énoncé...............................................................................................................................................16 III-D-2 - Solution 1.......................................................................................................................................... 16 III-D-3 - Solution 2.......................................................................................................................................... 16 IV - Liens utiles..........................................................................................................................................................17 V - Remerciements.................................................................................................................................................... 17 -2- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 3. Exercices shell scripts par Idriss NEUMANN (page personnelle) I - Niveau débutant I-A - Exercice 1 - Appréciation de note I-A-1 - Énoncé Créer un script qui demande à l'utilisateur de saisir une note et qui affiche un message en fonction de cette note : • "très bien" si la note est entre 16 et 20 ; • "bien" lorsqu'elle est entre 14 et 16 ; • "assez bien" si la note est entre 12 et 14 ; • "moyen" si la note est entre 10 et 12 ; • "insuffisant" si la note est inférieur à 10. I-A-2 - Solution Solution proposée par ok.Idriss : solution exercice 1 #!/bin/bash echo "Entrez votre note :" read note if [ $note -ge 16 ] then echo "très bien" elif [ $note -ge 14 ] then echo "bien" elif [ $note -ge 12 ] then echo "assez bien" elif [ $note -ge 10 ] then echo "moyen" else echo "insuffisant" fi I-B - Exercice 2 - Appréciation de note (v2) I-B-1 - Énoncé Reprenez l'exercice 1 et faites en sorte que le programme se répète tant que l'utilisateur n'a pas saisi une note négative ou 'q' (pour quitter). Le script doit calculez le nombre de notes de saisies et en faire la moyenne tout à la fin. I-B-2 - Solution Solution proposée par ok.Idriss : solution exercice 2 #!/bin/bash note=0 -3- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 4. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 2 moyenne=0 i=0 until [ $note -lt 0 ] do echo "Entrez votre note (q pour quitter) :" read note if [ $note = "q" ] then note=-1 echo "au revoir !" elif [ $note -ge 16 ] then echo "très bien" elif [ $note -ge 14 ] then echo "bien" elif [ $note -ge 12 ] then echo "assez bien" elif [ $note -ge 10 ] then echo "moyen" elif [ $note -ge 0 ] then echo "insuffisant" else echo "au revoir !" fi if [ $note -ge 0 ] then let moyenne=$moyenne+$note let i=$i+1 fi done if [ $i -le 0 ] then let i=1 fi let moyenne=$moyenne/$i echo "La moyenne est de $moyenne ($i notes)" I-C - Exercice 3 - Nombre élevé à sa propre puissance I-C-1 - Énoncé Créer un script qui prend un nombre en saisie et l'élève à sa propre puissance. C'est un peu le même principe que la factorielle mais cette fois, l'usage de la boucle for est imposé. Exemple d'exécution : [ ~] ./NomDuScript.sh Saisir une valeur : 4 2^2 = 4 I-C-2 - Solution 1 Solution proposée par ok.Idriss : -4- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 5. Exercices shell scripts par Idriss NEUMANN (page personnelle) Solution 1 exercice 3 #!/bin/bash echo "Saisir une valeur" read value result=1 for (( i=0 ; i<$value ; i++ )) do let result=$result*$value done echo "$value^$value = $result I-C-3 - Solution 2 Solution proposée par ok.Idriss : solution 2 exercice 3 #!/bin/bash operation () { result=1 for (( i=0 ; i<$value ; i++ )) do let result=$result*$value done echo "$value^$value = $result" } if [ $# -eq 0 ] then echo "Saisir une valeur" read value else value=$1 fi operation II - Niveau intermédiaire II-A - Exercice 1 - Appréciation de note (v3) II-A-1 - Énoncé Reprenez uniquement la version 1 de l'exercice. La note devra être donnée en paramètre ou bien saisie en cas d'absences d'arguments. La comparaison de la note devra être faite dans une fonction appreciation(). II-A-2 - Solution Solution proposée par ok.Idriss : solution exercice 1 #!/bin/bash appreciation () { if [ $note -ge 16 ] then echo "très bien" elif [ $note -ge 14 ] then -5- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 6. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 1 echo "bien" elif [ $note -ge 12 ] then echo "assez bien" elif [ $note -ge 10 ] then echo "moyen" else echo "insuffisant" fi } # programme principal clear if [ $# -ne 0 ] then note=$1 else echo "Saisir une note" read note fi appreciation II-B - Exercice 2 - TestUser II-B-1 - Énoncé Créer un script qui vous propose le menu suivant : 1 - Vérifier l'existence d'un utilisateur 2 - Connaître l'UID d'un utilisateur q - Quitter L'utilisateur devra être saisi, à l'aide d'une fonction. Son existence devra être vérifiée à l'aide d'une autre fonction. II-B-2 - Solution Solution proposée par ok.Idriss : solution exercice 2 #!/bin/bash function pause { echo "Appuyez sur ENTER pour continuer" read } function saisirUser { echo "Saisir l'utilisateur" read util } function verifyUser { if grep "^$util:" /etc/passwd > /dev/null then echo "L'utilisateur existe" else echo "L'utilisateur n'existe pas" fi pause -6- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 7. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 2 } rep=1 while [ $rep -eq 1 ] do clear printf "menu :nn" echo "1. Vérifier lexistence d'un utilisateur echo 2. Connaître l'UID d'un utilisateur echo -e 3. Quittern read choix case $choix in 1) saisirUser verifyUser ;; 2) saisirUser id $util pause ;; q) echo Au revoir pause rep=0 ;; *) echo Erreur de saisie pause ;; esac done II-C - Exercice 3 - Calculatrice II-C-1 - Énoncé Créer un script dans lequel deux nombres opérandes et un signe opérateur (+-*/) devront être donnés en paramètres, ou saisis en cas d'absence. Le script doit réaliser l'opération souhaitée. Exemple : [ ~] ./calculette.sh 7 + 4 Le résultat est : 11 Le calcul devra être fait à l'aide d'une fonction calcul (). II-C-2 - Solution Solution proposée par ok.Idriss : solution exercice 3 #!/bin/bash saisir () { printf Saisir le premier nombre, puis le signe de l'opération puis le deuxième nombre :nn read nb1 read s read nb2 } calcul () { -7- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 8. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 3 case $s in +) let result=$nb1+$nb2 ;; -) let result=$nb1-$nb2 ;; *) let result=$nb1*$nb2 ;; /) let result=$nb1/$nb2 ;; *) let result=0 echo -e Erreur de saisie !nLe résultat est faux.;; esac } calcul2 () { let result=$nb1$s$nb2 } if [ $# -eq 3 ] then nb1=$1 ; s=$2 ; nb2=$3 else saisir fi calcul echo Le résultat est $result calcul2 echo Calculé d'une autre façon : $result II-D - Exercice 4 - La factorielle II-D-1 - Énoncé Créer un script qui permet de calculer et d'afficher la factorielle d'un nombre donné en paramètre (ou saisi en cas d'absence de paramètres). II-D-2 - Solution 1 Solution proposée par ok.Idriss : solution 1 exercice 4 #!/bin/bash if [ $# -eq 0 ] then echo Saisir une valeur : read val else val=$1 fi # Dans le cas où c'est négatif, on rend la valeur positive if [ $val -lt 0 ] then let val=-1*$val fi result=1 val2=$val while [ $val -ne 0 ] do printf $val let result=$result*$val let val=$val-1 -8- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 9. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution 1 exercice 4 if [ $val -ne 0 ] then printf * fi done echo = $result II-D-3 - Solution 2 Solution proposée par Sve@r : solution 2 exercice 2 #!/bin/sh if test $# -eq 0 then echo Saisissez une valeur correcte read val set -- $val fi nb=${nb:-$1} res=${res:-1} if test $nb -eq 0 then echo $res exit fi res=`expr $res * $nb` nb=`expr $nb - 1` . $0 II-E - Exercice 5 - Les fichiers II-E-1 - Énoncé Créer un script qui doit calculer le nombre de fichiers standard, de sous-répertoires, et d'exécutables d'un répertoire quelconque qui sera donné en paramètre (ou saisis en cas d'absence du paramètre). II-E-2 - Solution Solution proposée par ok.Idriss : solution exercice 5 #!/bin/bash j=0 k=0 l=0 if [ $# -eq 0 ] then echo Saisir le répertoire read rep else rep=$1 fi -9- Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 10. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 5 cd $rep for i in * do if [ -d $i ] then echo $i let j=$j+1 fi if [ -f $i ] then echo $i let k=$k+1 fi if [ -x $i ] then echo $i let l=$l+1 fi done echo Il y a $j répertoires, $k fichiers et $l exécutables dans $rep II-F - Exercice 6 - Tri à bulle II-F-1 - Énoncé Créer un script qui devra enregistrer à l'aide d'un tableau, un nombre d'entiers donné en paramètre (ou en saisie) puis trier ceux-ci dans l'ordre croissant dans ce même tableau (sans passer par un autre) et enfin afficher le contenu du tableau (ordonné) sur la sortie standard. II-F-2 - Solution Solution proposée par ok.Idriss : solution exercice 6 #!/bin/bash if [ $# -lt 1 ] then echo Saisir le nombre d'éléments à ordonner read SIZE else SIZE=$1 fi echo Saisir les éléments : for (( i=0 ; iSIZE ; i++ )) do read tab[i] done for (( i=0 ; iSIZE ; i++ )) do for (( j=$i+1 ; jSIZE ; j++ )) do if [ ${tab[j]} -le ${tab[i]} ] then tampon=${tab[i]} tab[i]=${tab[j]} tab[j]=$tampon fi done - 10 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 11. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution exercice 6 done echo Valeurs ordonnées : for (( i=0 ; iSIZE ; i++ )) do echo ${tab[i]} done II-G - Exercice 7 - ls avec ordre inversé II-G-1 - Énoncé Créer un script qui renvoie la même sortie que la commande ls mais dans l'ordre décroissant (autrement dit : le script devra lister le contenu d'un répertoire dans l'ordre décroissant). Vous ne devez ni vous servir de la commande ls, ni de la commande sort. II-G-2 - Solution 1 Solution proposée par ok.Idriss : solution 1 exercice 7 #!/bin/bash # Si on a au moins un paramètre et que le premier paramètre est un répertoire if [ $# -ge 1 ] [ -d $1 ] then cd $1 fi nb=0 for fichier in * do tab[$nb]=$fichier let nb=$nb+1 done # affichage inversé for (( i=$nb ; i=0 ; i=$i-1 )) do echo ${tab[$i]} done II-G-3 - Solution 2 Solution proposée par becket : solution 2 exercice 7 #!/bin/bash listing=( * ) for (( i=${#listing[@]}-1 ; i = 0 ; i=i-1 )) do echo ${listing[$i]} done - 11 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 12. Exercices shell scripts par Idriss NEUMANN (page personnelle) II-G-4 - Solution 3 Solution proposée par N_Bah : solution 3 exercice 7 #!/bin/bash read -p' Entrez le nom du répertoire : ' repertoire if [ -d $repertoire ] then [[ $repertoire != */ ]] repertoire=${repertoire:+$repertoire/} shopt -s nullglob #sinon repertoireVide/*, retournera repertoireVide/* fichiers=( ${repertoire}* ) ((${#fichiers[@]})) { for (( x=${#fichiers[@]}-1; x=0; x-- )) do echo ${fichiers[x]} done } || echo $repertoire est vide else echo $repertoire n'est pas un répertoire fi II-G-5 - Solution 4 Solution proposée par chardclo : solution 4 exercice 7 #!/bin/bash read -p' Entrez le nom du répertoire : ' repertoire [ -d ${repertoire} ] || { printf %s n'est pas un nom de dossier valide. ${repertoire} exit 1 } compgen -o default ${repertoire}/ | tac II-G-6 - Solution 5 Solution proposée par chardclo : solution 5 exercice 7 #!/bin/bash read -p' Entrez le nom du répertoire : ' repertoire [ -d ${repertoire} ] || { printf %s n'est pas un nom de dossier valide.n ${repertoire} exit 1 } text= while read do text=${REPLY}n${text} done (compgen -o default ${repertoire}/) [[ ${text} ]] printf ${text} || printf le dossier %s est vide.n ${repertoire} - 12 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 13. Exercices shell scripts par Idriss NEUMANN (page personnelle) III - Niveau confirmé III-A - Exercice 1 - Fichier de notes III-A-1 - Énoncé Créer un script qui va devra exploiter les données d'un fichier de notes que vous aller créer au préalable dans le même répertoire que le script. Ce fichier sera appelé FichierNote et devra se présenter comme ceci : Dupont François 12 Durand Françoise 8 Dujardin Nicole 14 Le script devra afficher les lignes dans lesquelles la note est supérieure ou égale à 10. Si le fichier est vide, il devra quitter (donc ne pas boucler indéfiniment). Exemple : solution exercice 1 [ ~] ./NomDuScript Dupont François 12 Dujardin Nicole 14 [ ~] rm FichierNote [ ~] touch FichierNote [ ~] ./NomDuScript [ ~] III-A-2 - Solution Solution proposée par ok.Idriss : solution exercice 1 #!/bin/bash cat FichierNote | while read ligne do set -- $ligne if [ $3 -ge 10 ] then echo $ligne fi done III-B - Exercice 2 - Liste d'utilisateurs III-B-1 - Énoncé Créer un script qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des lignes comme ceci : Login + Tabulation + Nom + Tabulation + Prénom. Exemple : dupontf Dupont François fdurand Durand Françoise nicoled Dujardin Nicole - 13 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 14. Exercices shell scripts par Idriss NEUMANN (page personnelle) Le script devra vérifier, à l'aide d'une fonction, l'existence des utilisateurs enregistrés dans le fichier. Admettons, par exemple, que seul Dupont François soit un utilisateur et que le fichier se nomme ~/Documents/FichierUser, le script devra s'exécuter comme ceci : [ ~] ./NomDuScript ~/Doucuments/FichierUser dupontf Dupont François [ ~] ./NomDuScript Saisissez le fichier à traiter : ~/Documents/UserFichier Le fichier n'existe pas. [ ~] Le script devra donc, au préalable, vérifier l'existence du fichier avant de comparer son contenu au fichier /etc/passwd. Le script devra également quitter la boucle si le fichier est vide. III-B-2 - Solution Solution proposée par ok.Idriss : solution exercice 2 #!/bin/bash TestUser () { if grep ^$util: /etc/passwd /dev/null then echo $ligne fi } if [ $# -eq 0 ] then echo Chemin et nom du fichier : read fichier else fichier=$1 fi if [ -e $fichier ] then cat $fichier | while read ligne do set -- $ligne util=$1 TestUser done else echo Le fichier $fichier n'existe pas. fi III-C - Exercice 3 - Convertisseur décimal/binaire III-C-1 - Énoncé Créer un script qui prend en paramètre (ou en saisie en cas d'absence de paramètres) une valeur décimale et qui doit la convertir en binaire. Vous devez travailler sur 8 bits et chaque bit devra être contenu dans une case d'un tableau mono-dimensionnel et à la fin on affiche toutes les cases de ce tableau pour avoir la valeur en binaire lisible de droite à gauche, à partir de la valeur décimale saisie au départ. - 14 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 15. Exercices shell scripts par Idriss NEUMANN (page personnelle) III-C-2 - Solution 1 Solution proposée par ok.Idriss : solution 1 exercice 3 #!/bin/bash MaxBits=8 pow () { value2=1 for (( k=1 ; k$i ; k ++ )) do let value2=$value2*2 done } if [ $# -eq 0 ] then echo Saisir une valeur décimale read value else value=$1 fi declare -a bin j=0 for (( i=$MaxBits ; i=0 ; i-- )) do pow if [ $value -ge $value2 ] then bin[j]=1 let value=$value-$value2 else bin[j]=0 fi let j=$j+1 done printf La valeur binaire est de : for (( i=0 ; i$MaxBits ; i++ )) do printf ${bin[i]} done echo III-C-3 - Solution 2 Solution proposée par becket : solution 2 exercie 3 #!/bin/bash unset resultat echo Entrez une valeur a convertir : read i for (( cpt=8 ; $cpt 1 ; cpt-- )) do let resultat[$cpt]=$i 1 let i=i = 1 done echo ${resultat[@]} - 15 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 16. Exercices shell scripts par Idriss NEUMANN (page personnelle) III-C-4 - Solution 3 Solution proposée par chardclo : solution 3 exercice 3 #!/bin/bash unset res dec=$1 [[ $dec ]] || read -p Entrez une valeur a convertir : dec while : do res[dec]=$((dec 1)) ((dec=1 )) || break done echo ${res[@]} III-D - Exercice 4 - Moyenne de notes sur un fichier III-D-1 - Énoncé Créer un script qui prend en paramètre ou en saisie le nom d'un fichier contenant le nom des élèves et leurs trois notes. Le script devra : afficher les noms des élèves, puis calculer et afficher la moyenne de chaque élève Voici comment se présente le fichier : Durand 12 9 14 Lucas 8 11 4 Martin 9 12 1 III-D-2 - Solution 1 Solution proposée par ok.Idriss : solution 1 exercice 4 #!/bin/bash if [ $# -lt 1 ] then echo Saisir le nom du fichier read fichier else fichier=$1 fi cat $fichier | while read ligne do set -- $ligne let moyenne=($2+$3+$4)/3 echo L'élève $1 a pour moyenne $moyenne done III-D-3 - Solution 2 Solution proposée par N_Bah : solution 2 exercice 4 #!/bin/bash moyenne() { declare -i somme - 16 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/
  • 17. Exercices shell scripts par Idriss NEUMANN (page personnelle) solution 2 exercice 4 for i in $@; do somme+=$i; done echo $((somme / ${#@})) } [ -f $1 ] fichier=$1 || read -ep'Entrez le nom du fichier qui contient les données : ' fichier while read nom notes do echo -n $nom : moyenne $notes done $fichier IV - Liens utiles Quelques liens utiles permettant d'acquérir de bonnes bases : Advanced Bash-Scripting Guide (traduction) Présentation et cours Korn Shell (compatible avec le Bash) V - Remerciements Je souhaite remercier tous les contributeurs qui m'ont aidé à enrichir cet article par des exercices et/ou des solutions. Il s'agit en l'occurrence de becket, chardclo, N_Bah et Sve@r merci à eux. Je tiens également à remercier LittleWhite et paissad pour leur relecture technique et leurs conseils. Je tiens enfin à remercier jacques_jean pour son effort de relecture orthographique. - 17 - Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée à la SACD. http://ineumann.developpez.com/tutoriels/linux/exercices-shell/