(bash) afficher du texte en couleur

Résolu/Fermé
Signaler
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
-
 Aris Mango -
Bonjour tout le monde!!

je viens de créer un petit fichier.sh pour ma copine qui est sous ubuntu pour lui éviter le terminal.
le bash fonctionne très bien avec un petit message, maintenant je veux lui mettre le message en couleur, comment faire?

j'ai trouver un site qui me donne les codes couleur

Code couleur bash

* [01;01m : Brillant
* [01;05m : Clignote
* [01;07m : Fond Gris
* [01;31m : Rouge
* [01;32m : Vert
* [01;33m : Jaune
* [01;34m : Bleu
* [01;35m : Rose
* [01;36m : Vert Clair
* [01;41m : Fond Rouge
* [01;42m : Fond Vert
* [01;43m : Fond Orange
* [01;44m : Fond Bleu
* [01;45m : Fond Rose

Ecrire en couleur dans bash

echo -e '\033[41;33;1m TEXTE \033[m'
echo -e '\033[Couleur de fond];[Couleur du texte];1m TEXTE \033[m'

mais je ne sais pas les utiliser, quand je colle lexemple dans un fichier.sh ca ne fonctionne pas.

quelqu'un peut m'aider?

Merci d'avance a tous :)


5 réponses

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Salut,

Il faut que tu définisses des variables (soit en début de ton script, soit dans un fichier texte que tu sourceras depuis ton script) comme suit :

noir='\e[0;30m'
gris='\e[1;30m'
rougefonce='\e[0;31m'
rose='\e[1;31m'
vertfonce='\e[0;32m'
vertclair='\e[1;32m'
orange='\e[0;33m'
jaune='\e[1;33m'
bleufonce='\e[0;34m'
bleuclair='\e[1;34m'
violetfonce='\e[0;35m'
violetclair='\e[1;35m'
cyanfonce='\e[0;36m'
cyanclair='\e[1;36m'
grisclair='\e[0;37m'
blanc='\e[1;37m'

neutre='\e[0;m'


Et ensuite dans ton script tu les utilises comme ça :

echo -e "${rougefonce}Bonjour${neutre} ${jaune}les gens${neutre}"

N'oublies pas le "-e" pour la commande "echo" sans quoi les caractères d'échappement ne seront pas interprétés ;-\
;-))
24
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Merci, ce tuto a été d'une grande pour moi.
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
Yes je te remercie ;)

jai réussi a faire fonctionner le code du site par contre c'est pas terrible je préfère ta méthode!

ptite info, je débute dans le script ducoup je ne sais pas comment sourcer depuis le script.
peux tu m'expliquer ce qu'est un caractère d'échappement??

et quand je ne met pas le "-e" devant echo ca fonctionne quand même (avec le code du site) j'aimerais cimprendre pourquoi si tu as le temps de m'expliquer rapidement biensur :)

Merci encore
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Alors...

Sourcer un fichier c'est, en reprenant la définition de la page de man de bash, Lire et exécuter les commandes contenues dans le fichier avec l'environnement du shell en cours, autrement dit, dans le cas de variable, c'est les initialiser dans l'environnement (ton shell courant) actif. Plutôt que d'avoir à retaper toutes ces variables à chaque fois que tu écris un script, le plus simple est de créer un fichier texte contenant lesdites variables et de l'appeler depuis ton script de la façon suivante :

.   /chemin/vers/fichier.txt
ou
source   /chemin/vers/fichier.txt

Le "." (point) ou la commande "source" sont identiques (attention à bien laisser un espace après le point).

Les caractères d'échappement : Voir l'explication sur https://fr.wikipedia.org/wiki/Caract%C3%A8re_d%27%C3%A9chappement

Après tout dépend des programmes qui les interprètent. Par exemple chez moi, si je ne mets pas le "-e" voilà ce que j'obtiens :

$ echo  "${rougefonce}Bonjour${neutre} ${jaune}les gens${neutre}"
\e[0;31mBonjour\e[0;m \e[1;33mles gens\e[0;m

Les caractères sont interprétés littéralement et donc affichés tel quel ;-(
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
MERCI :D

juste une dernière petite question

source /chemin/vers/fichier.txt

je dois le placer tout au debut du script?
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Oui, juste après le shebang (#! /bin/bash) ;-)
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
ok! je te remercie d'avoir pris le temps de me répondre.

Passe une bonne journée

MERCI =]
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
haaaa je te relance parceque mon script ne fonctionne pas avec cette methode. je pense que c'est parceque j'ai mal définit mes variables, j'ai placé les variables apres le shebang comme ca brut.

t'aurais une idée
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Sur quelle distrib es-tu ?
Quel shell ?
Essaie de remplacer "echo -e" par "/bin/echo -e"
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
je suis sur ubuntu 10.10 avec gnome-terminal en virtualisation
#
#
#
yes man!

ca fonctionne avec "/bin/echo -e" pourquoi ca? (désolé si jsuis relou avec mes questions :$ trop curieux)
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Tu essaies en console directement ou depuis un script ?
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
depuis un script
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
Affiches-nous-le !
#!/bin/sh
#
#exemple: ${couleur}text${neutre}

noir='\e[0;30m'
gris='\e[1;30m'
rougefonce='\e[0;31m'
rose='\e[1;31m'
vertfonce='\e[0;32m'
vertclair='\e[1;32m'
orange='\e[0;33m'
jaune='\e[1;33m'
bleufonce='\e[0;34m'
bleuclair='\e[1;34m'
violetfonce='\e[0;35m'
violetclair='\e[1;35m'
cyanfonce='\e[0;36m'
cyanclair='\e[1;36m'
grisclair='\e[0;37m'
blanc='\e[1;37m'

neutre='\e[0;m'

/bin/echo -e "${orange}B${neutre}${vertclair}O${neutre}${jaune}N${neutre}${rose}J${neutre}${gris}O${neutre}${bleufonce}U${neutre}${violetclair}R${neutre} ${rougefonce}M${neutre}${cyanclair}A${neutre} ${blanc}B${neutre}${rougefonce}E${neutre}${jaune}L${neutre}${vertfonce}L${neutre}${violetfonce}E${neutre}"
echo
echo
echo "LANCEMENT DU NAS"
echo
echo
sudo mount -a
echo
echo
echo "BONNE JOURNEE"
echo
/bin/echo -e "${rougefonce} ??? ???
? ? ? ?
? ? ?
? ?
? ?
? ?
? ${neutre}"

read on


exit 0

cìest pour ma nana il sert a lancer le NAS de la maison depuis son pc portable.
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 480
#!/bin/sh
;-((

Affiche le résultat de :

ls -l /bin/*sh

Sur Ubuntu "sh" est un lien symbolique vers /bin/dash qui est un shell un peu restreint ;-((

Si dans la liste qui s'affiche tu as un "/bin/bash", remplace ton shebang pas "#! /bin/bash" ;-\
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
12
ok j'essai ca. sh c'est pas les premier script ou quelque chose comme ca? parceque pour le shebang je vois defois sh defois bash donc j'ai mis sh par rapport a l'extension
#
#
Ben nickel c'est ca! ;) MERCI