From status notifications to verbose logging, echo statements populate the terminal with essential feedback as scripts run. But plain white text on black background gets dull quickly. Thankfully, adding colors to echoes only requires basic ANSI escape sequences – no other syntax changes needed!
In this comprehensive guide for full stack developers, we will cover all you need to know to colorize echo output in bash on Linux with practical examples and expert techniques.
We will specifically dive into:
- Understanding ANSI Colors and Style Codes
- Examples Outputting Colored Text
- Dynamically Changing Colors in Scripts
- Colorizing Status Messages
- Styling System Information Output
- Highlighting Important Text
- Applying Background Colors
- Expert Tips for Custom Echo Colors
- Using Colors in Web Development Workflows
- Best Practices for Accessible Color Schemes
Let‘s dive in to transforming boring black and white terminal output!
Understanding ANSI Colors and Style Codes
ANSI escape codes allow changing text style and color right within terminal output. Each formatting code consists of:
Escape character – Signals that stylized output follows:
\033– Octal escape code\x1B– Hexadecimal escape
Style code – Defines the font style formatting like color, boldness etc. Codes 30-37 change just the text color while 40-47 change the background.
Text to style – String that prints out with applied formatting.
For example:
\033[31mRed Colored Text\033[0m
The \033[31m enables red font followed by resetting styling with \033[0m after.
Echo and other print-based commands will render the codes when passed the -e flag:
echo -e "\033[32mThis is green text\033[0m"
With this foundation, let‘s look at some straightforward examples!
Examples Outputting Colored Text
ANSI codes give script developers a whole palette for printing messages. Here‘s examples using the common text colors:
green=‘\033[0;32m‘ blue=‘\033[0;34m‘ orange=‘\033[0;33m‘echo -e "${orange}Orange Text" echo -e "${blue}Blue Text" echo -e "${green}Green Text"
Storing the codes as variables makes styling reuse and chaining output together simpler:
red=‘\033[0;31m‘
blue=‘\033[0;34m‘
echo -e "${red}This is red text ${blue}and this is blue text"
With over 16 available text colors and 8 background shades, the possibilities are endless!
Dynamically Changing Colors in Scripts
Hard-coding ANSI strings works but lacks flexibility. By generating codes dynamically, scripts can customize colors on the fly.
Here is an example "spinner" implementations that continuously cycles through a set of repeating colors:
colors=("\033[0;31m" "\033[0;33m" "\033[0;36m")while true do
for code in "${colors[@]}" do
echo -ne "${code}▉\r" sleep 0.2 done done
This iterates each color code in the array, applying it before a spinning character. The \rPlaces animation in same console line.

For even more customization, generate style sequences algorithmically using logic and configurable color palettes.
Next let‘s explore specific use cases taking advantage of dynamic color output.
Colorizing Status Messages
Well-placed colors clearly signify the state of script tasks – success, failure, pending etc.
Here is an example that defines green and red text variables for status updates:
green=‘\033[0;32m‘
red=‘\033[0;31m‘
# Task succeeded
echo -e "${green}Backup succeeded!${green}"
# Task failed
echo -e "${red}Error occurred! ${red}"

The visual association helps users quickly recognize positive and negative messages.
Consider styling other status indicators like:
- Pending tasks
- Progress percentage
- Debug mode on/off
- Connection status
Styling System Information Output
Bash scripts often log hardware statistics like memory, disk space, and network usage. Default number-heavy output lacks visual organization.
Strategically applied colors improve scanability of dense system data.
Here the warning color yellow draws attention to critically low disk space:
yellow=‘\033[1;33m‘
disk_usage=$(df -h | awk ‘$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}‘)
echo -e "${yellow}${disk_usage}${yellow}"

Consider other system data like:
- Memory consumption
- CPU utilization
- Available storage/bandwidth
- Running processes/services
Color coordination gives clarity to technical output.
Highlighting Important Text
Crucial lines like warnings and errors become visually lost in standard white text. Strategically placed colors spotlight significant output.
Here a magenta background isolates the error text:
magenta=‘\033[0;35m‘
echo -e "\033[0;33mOverall system health:\033[0m"
echo -e "${magenta}Error! Failed to lookup hostname${magenta}"

The bold magenta background ensures high visibility.
Consider highlighting:
- Deprecation warnings
- Request timeouts
- Missing configuration
- Resource exhaustion alerts
reserved colors like red, yellow, and magenta help convey important messages.
Applying Background Colors
So far we‘ve only changed the text colors. Bash echoes also support modifying the background color for even greater contrast using codes 40-47.
For example, this apology message really pops with a yellow background:
echo -e ‘\033[43;37;1mWe apologize for the inconvenience\033[0m‘

Backgrounds work well for large multi-line output like ASCII art banners and logos too.
Put these codes to use for highlighting:
- Server errors
- Warnings
- Notices
- Section headers
- Divider comments
With both foreground and background colors, the possibilities are endless!
Expert Tips for Custom Echo Colors
Hopefully these practical examples have inspired some ideas for integrating color in your scripts!
Here are some expert techniques for taking bash echo colors even further:
Reuse color strings
Define reusable color variables instead of duplicate codes
Use arrays
Store codes and sequences in arrays for efficient lookup
Apply multiple styles
Chain together colors, background, bold, underline etc
Add colors dynamically
Customize on the fly by generating sequences programmatically
Create custom color palettes
Design cohesive themes aligned to brand styleguides
Develop color libraries
Refactor common styles into include files or modules
Abstract functionality into functions
Encapsulate reusable colorization functions for cleaner scripts
With some creativity, the sky‘s the limit for bespoke formatting!
Using Colors in Web Development Workflows
While formatted echo statements shine in terminal scripts, their usefulness extends to web development too.
Front-end build tools like Webpack integrate terminal interactions directly into the browser development process.
Error Highlighting
The webpack dev server prints compilation errors and warnings straight to the terminal using familiar colored output:

Notice the red error text and yellow warnings. This coloring matches what displays inside the browser console itself!
Status Messages
Tools like npm leverage colors to indicate status as well:

Green clearly indicates success. While red shows failures.
Interactive CLIs
Node-based CLIs like Angular CLI and Vue CLI include colorization in their prompts and output:
The colors aid in distinguishing between user input, status messages, and file system output.
While frameworks handle colorization under the hood, understanding the underlying escape codes helps troubleshoot display issues. It also inspires you to implement similar color schemes in custom CLI tools.
Best Practices for Accessible Color Schemes
When planning color palettes, aim for sufficient contrast between foreground and background colors.
Use light text on dark backgrounds – Dark command line interfaces are common. Light font colors have more legibility over darker backgrounds.
Avoid red and green combinations – Red-green color blindness is the most common type. Avoid this color pairing when conveying status.
Ensure proper brightness contrast – Contrast ratio between colors should be at least 4.5:1 based on relative luminance.
Test backgrounds – Print colors on terminals with both light and dark schemes to ensure visibility.
Support override options – Allow users to specify custom colors to accommodate disabilities like color blindness.
With some consideration around visibility and inclusiveness, colorized output can enhance scripts without alienating users.
Conclusion
ANSI escape sequences enable simple yet powerful coloring directly in the terminal. By creatively applying codes to echo output, scripts visually communicate state, errors, progress etc.
The basic colorization process includes:
- Enabling ANSI codes with
-eflag - Formatting text with
\033[STYLEsequences - Resetting styling after text prints
Specific tips to remember:
- Use codes 30-37 to change just text color
- Select codes 40-47 to modify background
- Echo supports chaining multiple style markers
- Consider contrast and accessibility
Hopefully this guide has provided loads of ideas and best practices to integrate UI enhancements into your bash scripts and workflows! Let me know if you have any other creative uses for programmatic coloring.


