Scripts shell Linux et Unix

Scripts shell Linux et UnixCe livre, paru fin septembre 2012, est une nouvelle édition de « Shells Linux et Unix par la pratique » avec un titre légèrement modifié pour faire mieux apparaître la notion de scripts qui est prédominante dans le texte.

Nouveautés

Le texte a été légèrement retouché pour actualiser les informations concernant les shells (notamment dash, le Debian Almquist Shell que l’on rencontre sur les distributions Debian, Ubuntu, etc.)

Un chapitre supplémentaire a été ajouté contenant quinze scripts entiers que j’utilise quotidiennement ou occasionnellement, mais qui m’ont tous été utiles un jour.

Enfin, un QCM de vérification de ses connaissances (avec corrections bien sûr) est disponible en fin d’ouvrage.

Commander le livre sur Amazon

Scripts Shell Linux et Unix (sur Amazon)

Commander le livre en PDF sur iziBook

La version PDF est désormais disponible.

Scripts shell Linux et Unix De Christophe Blaess - Eyrolles
Scripts shell Linux et Unix

Suppléments

Les exercices et exemples se trouvent ici :

Sommaire

  • Avant-propos
  • Chapitre 1 – Principes des scripts Shell
    • Le shell Unix
      • Pourquoi écrire un script shell ?
      • Outils nécessaires
    • Exécution d’un script
      • Invocation de l’interpréteur
      • Appel direct
      • Ligne shebang
    • Conclusion
    • Exercices
  • Chapitre 2 – Programmation Shell
    • Premier aperçu
    • Premier script, rm_secure
    • Analyse détaillée
    • Performances
    • Exemple d’exécution
    • Conclusion
    • Exercices
  • Chapitre 3 – Évaluation d’expressions
    • Variables
      • Précisions sur l’opérateur $
    • Calcul arithmétique
    • Invocation de commande
    • Portées et attributs des variables
    • Paramètres
      • Paramètres positionnels
      • Paramètres spéciaux
    • Protection des expressions
      • Protection par le caractère backslash
      • Protection par apostrophes
      • Protection par guillemets
    • Tableaux
    • Évaluation explicite d’une expression
    • Conclusion
    • Exercices
  • Chapitre 4 – Éléments de programmation shell
    • Commandes et code de retour
      • Commande simple
      • Pipelines
      • Listes de pipelines
      • Commandes composées
    • Redirections d’entrées-sorties
      • Entrées-sorties standards
      • Redirection des entrées-sorties standards
      • Redirections avancées
    • Structures de contrôle
      • Sélection d’instructions
      • Itérations d’instructions
      • Fonctions
    • Conclusion
    • Exercices
  • Chapitre 5 – Commandes, variables et utilitaires système
    • Commandes internes
      • Comportement du shell
      • Exécution des scripts et commandes
      • Interactions avec le système
      • Arguments en ligne de commande
      • Variables internes
    • Commandes externes
    • Conclusion
    • Exercices
  • Chapitre 6 – Programmation shell avancée
    • Processus fils, parallélisme
    • Arrière-plan et démons
    • Signaux
      • Envoi d’un signal
      • Réception d’un signal
      • Attente de signaux
    • Communication entre processus
    • Entrées-sorties
      • tee
      • xargs
    • Interface utilisateur
      • stty
      • tput
      • dialog
    • Déboguer un script
    • Virgule flottante
    • Conclusion
  • Chapitre 7 – Expressions régulières – Grep
    • Introduction
    • Expressions régulières simples
    • Expressions rationnelles étendues
    • Outil grep
    • Recherche récursive avec find
    • Conclusion
    • Exercices
  • Chapitre 8 – Sed
    • Présentation
    • Utilisation de Sed
      • Principe
      • Fonctionnement de Sed
      • Commandes Sed
    • Conclusion
    • Exercices
  • Chapitre 9 – Awk
    • Fonctionnement de Awk
      • Les motifs
      • Les actions
      • Les variables
    • Enregistrements et champs
      • Les enregistrements
      • Les champs
    • Structures de contrôle
    • Expressions
    • Retour sur les affichages
    • Conclusion
    • Exercices
  • Chapitre 10 – Bonne écriture d’un script
    • Présentation générale
    • Les variables
    • Gestion des erreurs
    • Les fonctions
    • Conclusion
    • Exercices
  • Annexe A – Scripts complet
    • Administration système
      • Générateur de mots de passe
      • Exécution d’un ping vers un ensemble de serveurs
      • Supervision distante d’un petit parc de machines
      • Image de l’activité système
      • Synchronisation de répertoires distants
    • Fichiers et bases de données
      • Sauvegarde quotidienne
      • Renommage d’un ensemble de fichiers
      • Scan et archivage de documents
      • Création d’une base de données
      • Consultation d’une base de données
    • Scripts divers
      • Calcul de prix et de TVA
      • Générateur aléatoire suivant une loi normale
      • Calcul et affichage d’histogramme
      • Préparation d’un script d’installation
      • Présentation d’un fichier script
  • Annexe B – Q.C.M. d’évaluation
    • Énoncés
    • Solutions
  • Annexe C – Solutions des exercices
    • Chapitre 1
    • Chapitre 2
    • Chapitre 3
    • Chapitre 4
    • Chapitre 5
    • Chapitre 7
    • Chapitre 8
  • Annexe D – Bibliographie
    • Livres et articles
    • Sites de références
  • Index

18 Réponses

  1. Magus62 dit :

    Il semble que la cible de l’archive Zip renvoie sur cette page. Serait-il possible de récupérer cette archive ?

  2. Perrin dit :

    Bonjour,

    Dans votre livre, souvent vous renvoyé à des explication de fonction qui seront étudiée plus loin dans l’ouvrage.

    exemple: Chap 2, page 18 4§: Fonction « getopts » : Nous détaillerons ………

    Pourriez-vous me dire comment on retrouve le détail de ces différents renvois.

    D’avance merci de votre réponse.

    Librement votre.

    Jean-Luc

    • cpb dit :

      Bonjour,

      En principe la plupart des commandes et fonctions sont indiquées dans l’index à la fin du livre.
      Pour getopts, page 294, on trouve les renvois vers les pages 18, 142, 145, 236. La page qui vous intéresse est la 142 je pense.

      Bonne lecture.

  3. RenaudD dit :

    Bonjour Christophe,

    Je connaissais déjà Bash et ksh, j’ai cependant acheté votre livre « Scripts shell Linux et Unix » par curiosité et je ne le regrette pas, car j’y découvre ou redécouvre beaucoup de choses et de « trucs » intéressants.
    Petit détail : Je pense qu’il y a une petite erreur dans le tableau de la p.56 comparant les options de « export » et de « declare ». Il y est dit que  » ‘declare’ affiche les éléments exportés » : non, c’est « declare -x » qui fait cela. Le comportement de ‘declare’ tout court n’est pas très bien documenté mais , d’après mes tests en bash 4.2 tous cas, cela affiche toutes les variables, exportées ou non.

    • RenaudD dit :

      Par rapport à ma remarque précédente, pour être plus précis : « declare -x » affiche les *variables* exportées et non pas tous les éléments (=> les fonctions exportées ne sont pas affichées). Même remarque pour « export -p », mentionné à la même ligne du tableau.

  4. salt dit :

    Bonjour Monsieur,

    Nous sommes en 2022, j’utilise un debian et zsh, or rien ne se passe en utilisant l’interpréteur bash et zsh et quand j’utilise sh

    ./rm_secure.sh: 4: function: not found
    ./rm_secure.sh: 6: local: not in a function

    je parle du programme rm_secure trouvé sur votre site, je raté quelques chose je suis néophyte desolé ?

    • cpb dit :

      Bonjour,

      Je pense qu’il faut remplacer la ligne 3 :

      function rm

      par

      rm()

      C’est cette dernière syntaxe qui est la mieux acceptée par les shells actuels.

  5. ej dit :

    Bonjour, je me permet de vous faire remonter une petite erreur d’inattention, pour le script rm_secure, à la ligne 14 vous avez initialisé la variable OPTERR et non OPTIND. Cela cause le problème suivant : lorsque l’on appelle rm une première fois, puis une deuxième, la fonction déplacera le fichier passé en argument dans ~/bin/.rm_saved sans prendre en compte les options.

    En vous remerciant pour votre ouvrage.

    EJ

  6. jpp dit :

    Bonjour,
    Solutions des exercices
    Chapitre 1
    1.1 – Prise en main du système
    Pour identifier les shells disponibles sur votre système, il existe plusieurs possibilités. Je vous propose la solution suivante :
    ls /bin/*sh* : nous recherchons tous les fichiers contenant la portion « sh » dans le répertoire système principal (/bin). Attention, certains utilitaires système comme chsh pourront être mentionnés, bien qu’ils ne soient pas des shells.
    Déterminer l’identité de /bin/sh peut être plus problématique. En général, il suffit toutefois de lister « ls -l /bin/sh » pour s’apercevoir que c’est un lien symbolique vers bash ou ksh.

    Sur une debian sid j’ai dash pour la commande: « ls -l /bin/sh », est-ce normal ?

    • cpb dit :

      Oui c’est le « Debian Shell ». Il n’implémente qu’une version très limitée des fonctionnalités des shells Linux (pour vérifier la portabilité des scripts).
      S’il est trop restrictif pour exécuter vos scripts, remplacez la ligne shebang par `#!/bin/bash`.

  7. jpp dit :

    Dans les solutions d’exercice

    2.1 – Appel d’un script par « source »
    Lorsqu’on appelle notre script avec :
    un nouveau processus shell est invoqué (grâce à sa première ligne shebang) pour inter- préter les commandes. La variable n’est donc remplie que dans la mémoire de ce nouveau shell et, une fois celui-ci terminé, le contenu est perdu.
    $ ./initialise_et_affiche.sh

    Ce document est la propriété exclusive de Jean-Pierre Pinson (pinson.jeanpierre@gmail.com) – jeudi 18 juillet 2024 à 18h56
    En revanche, avec l’invocation :
    $ . initialise_et_affiche.sh
    c’est le shell courant (interactif) qui interprète le fichier. Le contenu de la variable est donc toujours visible après exécution du script.

    Je ne vois pas la différence entre
    $ ./initialise_et_affiche.sh
    et
    source initialise_et_affiche.sh

    « Le contenu de la variable est donc toujours visible après exécution du script. »
    Je ne comprends pas
    Dans les deux cas, le contenu de la variable est bien affiché, c’est: 2008
    Donc aucune différence
    Pourriez-vous m’expliquer ce que vous avez voulu dire ?

  8. jpp dit :

    Désolé c’est moi qui avait mal lu l’exercice,
    j’ai compris maintenant! 🙂

  9. jpp dit :

    Je voudrais poser une question
    Le livre traite des shells
    Mais vous employer lequel dans les examples et les exercices ?

  10. jpp dit :

    2.2 – Utilisation de rm_secure.sh (plutôt facile)
    2.3 – Adaptation de rm_secure.sh (plutôt difficile)
    Ne figurent pas dans les solutions d’exercice.