(bash) afficher du texte en couleur [Résolu/Fermé]

LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 11:48 - Dernière réponse :  Aris Mango
- 8 juin 2017 à 16:18
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 :)


Afficher la suite 

18 réponses

zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 12:16
+17
Utile
1
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 ;-\
;-))
Cette réponse vous a-t-elle aidé ?  
Merci, ce tuto a été d'une grande pour moi.
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 12:25
0
Utile
1
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
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 12:38
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 http://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 ;-(
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 12:43
0
Utile
2
MERCI :D

juste une dernière petite question

source /chemin/vers/fichier.txt

je dois le placer tout au debut du script?
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 12:45
Oui, juste après le shebang (#! /bin/bash) ;-)
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 12:53
ok! je te remercie d'avoir pris le temps de me répondre.

Passe une bonne journée

MERCI =]
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 13:16
0
Utile
7
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
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 13:28
Sur quelle distrib es-tu ?
Quel shell ?
Essaie de remplacer "echo -e" par "/bin/echo -e"
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 13:29
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)
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 13:38
Tu essaies en console directement ou depuis un script ?
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 14:26
depuis un script
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 14:30
Affiches-nous-le !
0
Utile
2
#!/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.
zipe31 35174 Messages postés dimanche 7 novembre 2010Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 31 mars 2011 à 15:22
#!/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" ;-\
LezardMoo 554 Messages postés mercredi 5 janvier 2011Date d'inscription 21 janvier 2015 Dernière intervention - 31 mars 2011 à 15:39
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