Linux : Séquences Escape-Control pour coloriser les scripts

I. Présentation

A l’ère du digital, on cherche toujours à visualiser les éléments ou à accentuer les composants visuels pour mettre en évidence telle ou telle conclusion. Mais, il faut savoir que sur le shell Linux on peut également utiliser certains artefacts visuels pour mettre en évidence certains éléments.

C’est souvent le cas dans les scripts où l’on souhaite distinguer le cas d’un test positif et/ou négatif. Si l’on reprend un exemple bien connu des administrateurs GNU/Linux : c’est le démarrage ou l’arrêt du système d’exploitation. On trouve très souvent les différentes étapes surlignées par un indicateur [ OK ] ou [ ERROR ] , comme le montre la capture ci-dessous :

En fait, cela est très facilement réalisable sur n’importe quel script, à condition de bien suivre la procédure suivante. En fait, il est possible de coloriser le texte de nos scripts, de le mettre en italique, en gras en surligné, avec un affichage plus intense...

Les cas d’utilisation sont généralement liés au fait de souhaiter :

- Mettre en évidence un point capital. Mais, on ne veut pas que l’utilisateur puisse avoir un contrôle sur les indicateurs. On peut alors utiliser vim pour effectuer la mise en contraste des éléments. Car, l’outil supporte le coloriage, les effets de type surligné, gras, italique… Dans ce cas, on n’a pas la garantie que sur un autre poste vim sera lui aussi configuré de la même manière. La portabilité n’est pas assurée.

- Avoir la possibilité d’utiliser de façon lisible et portable la solution. On doit alors utiliser les codes “escape“ ANSI. Ceux-ci garantissent non seulement la facilité d’utilisation mais également la portabilité et la souplesse.

Ce mode permet de contrôler la couleur du texte ainsi que celle du fond d’écran d’affichage.

ATTENTION : aujourd’hui, la plupart des terminaux supportent ce mode d’affichage. Mais, il se peut que certains anciens VT nécessitent un paramétrage, voire même ne le supporte pas.

La codification est assez compliquée, car elle met en œuvre une séquence de touches multiples. Ainsi, pour la couleur de texte on dispose des contrôles suivants :

- Noir : ESC[30m
- Rouge : ESC[31m
- Vert : ESC[32m
- Jaune : ESC[33m
- Bleu : ESC[34m
- Magenta : ESC[35m
- Cyan : ESC[36m
- Blanc : ESC[37m
- Défaut : ESC[39m

Ensuite, on peut également contrôler la couleur du fond de l’affichage, via les séquences ci-dessous :

- Noir : ESC[40m
- Rouge : ESC[41m
- Vert : ESC[42m
- Jaune : ESC[43m
- Bleu : ESC[44m
- Magenta : ESC[45m
- Cyan : ESC[46m
- Blanc : ESC[47m
- Défaut : ESC[49m

On peut également y ajouter des effets de texte comme le surligné, le gras, l’italique, en utilisant les séquences suivantes :

- Gras : ESC[1m
- Souligné : ESC[4m
- Clignotant : ESC[5m
- Reset/Défaut : ESC[0m

Enfin, il est tout à fait possible de mixer ces composantes pour donner plusieurs effets à un texte ou à un fond d’écran.

Exemple : Pour lister du texte rouge clignotant sur fond blanc, il faudra écrire la séquence : ESC[5 ;31 ;47m

REMARQUE : la symbolique ESC est généralement codifiée, au sein d’un script, par "\033".

 

II. Ecriture d’un test d’existence de compte

Afin d’illustrer ces propos, nous allons maintenant écrire un script permettant de tester l’existence d’un utilisateur, au sein du système d’exploitation local. Ce que l’on souhaite, c’est en cas d’inexistence, réaliser la création dudit utilisateur.

En cas d’erreur, lors d’une des étapes on affichera alors soit le message [ OK ], soit le message [ ERROR ]. A l’aide des éléments que l’on vu précédemment, on va donc générer notre script. Il s’agit là d’un exemple simpliste, mais on voit très bien comment mettre cela en fonction pour des scripts plus complexes :

# !/bin/bash
# Script de tests du compte toto
#
TSTACCNT=$(getent passwd toto|wc –l)
TSTGRP=$(getent group toto|wc –l)
if [ $ TSTACCNT –eq 1 ] && [ $TSTGRP –eq 1 ]
then
  echo –en "Compte deja existant.\n"
  $(userdel toto ; rm –fR /var/spool/mail/toto ;rm –fR /home/toto)
  if [ $ ? –ne 0 ]
  then
    echo "Suppression du compte toto existant \t"
    echo –en "[\033[01;31m ERROR \033[0m]\n"
  else
    echo "Suppression du compte toto existant \t"
    echo –en "[\033[01;32m ERROR \033[0m]\n"
  fi
fi
echo –en "Création du compte toto \t\t"
$(useradd toto 1>/dev/null)“
[[ $ ? –eq 0 ]] && {
 echo –en "\E[01;32m”\033[1m OK \033[0m]\n" 
 echo –en "Initialisation du compte toto\n"
 passwd toto << EOF 2> &1 > /dev/null
toto
toto
EOF
echo –en "\n"
}

if [ $ ? –ne 0 ]
then
    echo "Initialisation du compte \t\t"
echo –en “[\033[01;31m ERROR \033[0m]\n“
else
    echo "Initialisation du compte \t\t"
echo –en "[\033[01;32m OK \033[0m]\n"
fi
exit 0

 

REMARQUE : on peut tout à fait banaliser le nom du compte à créer et le passer en paramètre au script. Il suffit de remplacer les chaînes "toto" par $1. On peut aussi personnaliser différemment ce script. Ici, il ne s’agit que d’un exemple.

 

III. Résultat du script

IV. Cas d’usage

On peut imaginer automatiser la création des comptes sur un système en positionnant un mot de passe par défaut fixe ou généré. Ainsi, grâce à ce script il devient possible de créer les utilisateurs en batterie.

Bien évidemment, on peut aussi utiliser ce genre de mécanisme pour favoriser la visualisation d’informations, au travers, par exemple du fichier d’accueil /etc/motd, comme :

- le nom de la machine,
- la version de son système d’exploitation,
- la distribution
- les services importants actifs (NTP, SSH, etc.)

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Philippe PIERRE

A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.

Nombre de posts de cet auteur : 69.Voir tous les posts

4 thoughts on “Linux : Séquences Escape-Control pour coloriser les scripts

    • Bonsoir,
      Je ne suis pas sûr que la réponse que j’ai faite hier soir ait été prise en compte. Aussi j’en refais une ce soir. Je suis d’accord avec vous, il vaut mieux utiliser tput (plus pratique et surtout évitant de saisir les séquences escape).
      Toutefois, on n’est plus au temps des terminaux où il fallait configurer, la vitesse d’affichage, l’entrelacement… De plus, revenir aux “basics“ de temps en temps ne fait pas de mal.
      Pour finir, je dirais que cela me donnera l’occasion de faire un billet sur tput 🙂

      Répondre
    • Bonsoir,
      Je ne suis pas sûr que la réponse que j’ai faite hier soir ait été prise en compte. Aussi j’en refais une ce soir. Je suis d’accord avec vous, il vaut mieux utiliser tput (plus pratique et surtout évitant de saisir les séquences escape).
      Toutefois, on n’est plus au temps des terminaux où il fallait configurer, la vitesse d’affichage, l’entrelacement… De plus, revenir aux “basics“ de temps en temps ne fait pas de mal.
      Pour finir, je dirais que cela me donnera l’occasion de faire un billet sur tput 🙂

      Répondre

Répondre à mmu_man Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.