В заключительной части изучения Bash мы рассмотрим, как выводить текст с цветом и форматированием, чтобы сделать скрипты более читаемыми и удобными. Узнаем, как использовать команду echo с ключом -e и различные управляющие последовательности для изменения цвета и стиля текста. Примеры покажут, как создавать цветные сообщения, настраивать цветные приглашения в командной строке и объединять управляющие последовательности для достижения желаемого эффекта. Использование цветного текста поможет лучше визуализировать вывод и улучшить восприятие информации.
Текст в bash можно выводить с определенным цветом, чтобы его было удобнее воспринимать.
Для этого у команды echo есть ключ -e. Он включает отображение "backslash escapes", или дополнительных ключей обратного слэша: например, \n - переход на следующую строку, \t - табуляция и т.д.
Для сравнения, выполните echo без ключа -e:
echo '\033[37;1;41mHello World!\033[0m'
А теперь с ключом:
echo -e '\033[37;1;41mHello World!\033[0m'
Разница очевидна!
Переходим к управлению цветом:
tput sgr0 Возврат цвета в "нормальное" состояние
\033[0m все атрибуты по умолчанию
\033[1m жирный шрифт (интенсивный цвет)
\033[2m полу яркий цвет (тёмно-серый, независимо от цвета)
\033[4m подчеркивание
\033[5m мигающий
\033[7m реверсия (знаки приобретают цвет фона, а фон -- цвет знаков)
\033[22m установить нормальную интенсивность
\033[24m отменить подчеркивание
\033[25m отменить мигание
\033[27m отменить реверсию
\033[30 чёрный цвет знаков
\033[31 красный цвет знаков
\033[32 зелёный цвет знаков
\033[33 желтый цвет знаков
\033[34 синий цвет знаков
\033[35 фиолетовый цвет знаков
\033[36 цвет морской волны знаков
\033[37 серый цвет знаков
\033[40 чёрный цвет фона
\033[41 красный цвет фона
\033[42 зелёный цвет фона
\033[43 желтый цвет фона
\033[44 синий цвет фона
\033[45 фиолетовый цвет фона
\033[46 цвет морской волны фона
\033[47 серый цвет фона
Цвет | Код | Код фона |
---|---|---|
black | 30 40 | \033[30m \033[40m |
red | 31 41 | \033[31m \033[41m |
green | 32 42 | \033[32m \033[42m |
yellow | 33 43 | \033[33m \033[43m |
blue | 34 44 | \033[34m \033[44m |
magenta | 35 45 | \033[35m \033[45m |
cyan | 36 46 | \033[36m \033[46m |
grey | 37 47 | \033[37m \033[47m |
Допускается объединение этих управляющих последовательностей.
Например, \033[1m\033[5m\033[36m может быть заменено эквивалентной последовательностью \033[1;5;36m.
Пример:
#!/bin/sh
#
# скрипт выводит на экран сообщение с использованием цвета
#
echo -en "\033[37;1;41m Внимание \033[0m"
Еще пример:
#!/bin/sh
#
# скрипт запускает копию командного интерпретатора sh
# с цветным приглашением
#
export PS1="\[\033[1;30m\][\[\033[0m\]\t\[\033[1;30m\];\
\[\033[0m\]\W\[\033[1;30m\]]\[\033[36;1m\]|\[\033[0m\] "
echo "Now runing a new copy of shell width color prompt"
echo -en "use \033[1;36mexit\033[0m command or"
echo -e "\033[1;36m^D\033[0m to return back"
sh
#
# обратите внимание на то, что управляющие последовательности
# заключены в скобки "\[" и "\]"
# Это сделано для того, чтобы shell не учитывал их при
# оценке длины строки.
# В противном случае длинные строки будут переноситься неверно.
#
Для удобства пользвания можно цвет и доп. свойства назначить переменным:
RED='\033[0;31m' # ${RED}
GREEN='\033[0;32m' # ${GREEN}
Файл .sh должен быть в формате UNIX и с кодировкой UTF-8.
Ну и напоследок — один хороший пример со всеми плюшками:
#!/bin/sh
# echo подсветка
# echo color
# Скрипт выводит на экран список меню
clear # Очистка экрана
#Памятка, Таблица цветов и фонов
#Цвет код код фона
#black 30 40 \033[30m \033[40m
#red 31 41 \033[31m \033[41m
#green 32 42 \033[32m \033[42m
#yellow 33 43 \033[33m \033[43m
#blue 34 44 \033[34m \033[44m
#magenta 35 45 \033[35m \033[45m
#cyan 36 46 \033[36m \033[46m
#white 37 47 \033[37m \033[47m
# Дополнительные свойства для текта:
BOLD='\033[1m' # ${BOLD} # жирный шрифт (интенсивный цвет)
DBOLD='\033[2m' # ${DBOLD} # полу яркий цвет (тёмно-серый, независимо от цвета)
NBOLD='\033[22m' # ${NBOLD} # установить нормальную интенсивность
UNDERLINE='\033[4m' # ${UNDERLINE} # подчеркивание
NUNDERLINE='\033[4m' # ${NUNDERLINE} # отменить подчеркивание
BLINK='\033[5m' # ${BLINK} # мигающий
NBLINK='\033[5m' # ${NBLINK} # отменить мигание
INVERSE='\033[7m' # ${INVERSE} # реверсия (знаки приобретают цвет фона, а фон -- цвет знаков)
NINVERSE='\033[7m' # ${NINVERSE} # отменить реверсию
BREAK='\033[m' # ${BREAK} # все атрибуты по умолчанию
NORMAL='\033[0m' # ${NORMAL} # все атрибуты по умолчанию
# Цвет текста:
BLACK='\033[0;30m' # ${BLACK} # чёрный цвет знаков
RED='\033[0;31m' # ${RED} # красный цвет знаков
GREEN='\033[0;32m' # ${GREEN} # зелёный цвет знаков
YELLOW='\033[0;33m' # ${YELLOW} # желтый цвет знаков
BLUE='\033[0;34m' # ${BLUE} # синий цвет знаков
MAGENTA='\033[0;35m' # ${MAGENTA} # фиолетовый цвет знаков
CYAN='\033[0;36m' # ${CYAN} # цвет морской волны знаков
GRAY='\033[0;37m' # ${GRAY} # серый цвет знаков
# Цветом текста (жирным) (bold) :
DEF='\033[0;39m' # ${DEF}
DGRAY='\033[1;30m' # ${DGRAY}
LRED='\033[1;31m' # ${LRED}
LGREEN='\033[1;32m' # ${LGREEN}
LYELLOW='\033[1;33m' # ${LYELLOW}
LBLUE='\033[1;34m' # ${LBLUE}
LMAGENTA='\033[1;35m' # ${LMAGENTA}
LCYAN='\033[1;36m' # ${LCYAN}
WHITE='\033[1;37m' # ${WHITE}
# Цвет фона
BGBLACK='\033[40m' # ${BGBLACK}
BGRED='\033[41m' # ${BGRED}
BGGREEN='\033[42m' # ${BGGREEN}
BGBROWN='\033[43m' # ${BGBROWN}
BGBLUE='\033[44m' # ${BGBLUE}
BGMAGENTA='\033[45m' # ${BGMAGENTA}
BGCYAN='\033[46m' # ${BGCYAN}
BGGRAY='\033[47m' # ${BGGRAY}
BGDEF='\033[49m' # ${BGDEF}
tput sgr0 # Возврат цвета в "нормальное" состояние
#Начало меню
echo ""
echo -n " "
echo -e "${BOLD}${BGMAGENTA}${LGREEN} Меню DNS323 ${NORMAL}"
echo ""
echo -en "${LYELLOW} 1 ${LGREEN} Комманды для удобной работы в telnet ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 2 ${LGREEN} Пути к папкам & Изменение прав доступа ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 3 ${LGREEN} Transmission (${GREEN}Start${NORMAL}, ${LRED}Stop${NORMAL}, ${CYAN}Upgrade${NORMAL}) ${GRAY}(Меню)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 4 ${LGREEN} Копирование (cp & rsync) ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 5 ${LGREEN} Создание ссылки на файл или папку ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 6 ${LGREEN} Установка из fun-plug & IPKG ${GRAY}(Комманды)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 7 ${LGREEN} Показать Трафик (${LYELLOW} n${LGREEN}load) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 8 ${LGREEN} Диспетчер задач (${LYELLOW} h${LGREEN}top) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LYELLOW} 9 ${LGREEN} Midnight Commander (${LYELLOW} m${LGREEN}c) ${GRAY}(Выполнить?)${NORMAL}\n"
echo ""
echo -en "${LMAGENTA} q ${LGREEN} Выход ${NORMAL}\n"
echo ""
echo "(Введите пожалуйта номер пункта, чтобы выполнить комманды этого пункта, любой другой ввод, Выход)"
echo ""
tput sgr0
Источник: