Цветные сценарии в Bash

Источники:
http://www.opennet.ru/docs/RUS/bash_scripting_guide/x13621.html
http://lazysketches.blogspot.com/2008/10/bash.html

#!/bin/sh
c_std=""
c_h_std=""
c_pink=""
c_h_pink=""
c_red=""
c_h_red=""
c_cayan=""
c_h_cayan=""
c_yellow=""
c_green=""
c_h_green=""
c_blue=""
c_h_blue=""

В нем задаются переменные, хранящие в себе соответствующие своим названиям цвета. Так, например, «c_std» — стандартный цвет текста в терминале; «c_h_std» — он же, но более «жирное» начертание, и т.д.

Этот файл можно использовать в скриптах для цветного вывода. Например:

#!/bin/bash
. /etc/colors

echo "${c_green}Это зеленый цвет${c_std}"

Для установки атрибутов отображения информации на экране, таких как: жирный текст, цвет символов, цвет фона и т.п., с давних пор используются ANSI [1] escape-последовательности. Эти последовательности широко используются в пакетных файлах DOS, эти же последовательности используются и в сценариях Bash.

Пример 33-8. «Цветная» адресная книга

#!/bin/bash
# ex30a.sh: Версия сценария ex30.sh, с добавлением цвета .
#           Грубый пример базы данных


clear                                   # Очистка экрана

echo -n "          "
echo -e '\E[37;44m'"\033[1mСписок\033[0m"
                                        # Белый текст на синем фоне
echo; echo
echo -e "\033[1mВыберите интересующую Вас персону:\033[0m"
                                        # Жирный шрифт
tput sgr0
echo "(Введите только первую букву имени.)"
echo
echo -en '\E[47;34m'"\033[1mE\033[0m"   # Синий
tput sgr0                               # сброс цвета
echo "vans, Roland"                     # "[E]vans, Roland"
echo -en '\E[47;35m'"\033[1mJ\033[0m"   # Пурпурный
tput sgr0
echo "ones, Mildred"
echo -en '\E[47;32m'"\033[1mS\033[0m"   # Зеленый
tput sgr0
echo "mith, Julie"
echo -en '\E[47;31m'"\033[1mZ\033[0m"   # Красный
tput sgr0
echo "ane, Morris"
echo

read person

case "$person" in
# Обратите внимание: переменная взята в кавычки.

  "E" | "e" )
  # Пользователь может ввести как заглавную, так и строчную букву.
  echo
  echo "Roland Evans"
  echo "4321 Floppy Dr."
  echo "Hardscrabble, CO 80753"
  echo "(303) 734-9874"
  echo "(303) 734-9892 fax"
  echo "revans@zzy.net"
  echo "Старый друг и партнер по бизнесу"
  ;;

  "J" | "j" )
  echo
  echo "Mildred Jones"
  echo "249 E. 7th St., Apt. 19"
  echo "New York, NY 10009"
  echo "(212) 533-2814"
  echo "(212) 533-9972 fax"
  echo "milliej@loisaida.com"
  echo "Подружка"
  echo "День рождения: 11 февраля"
  ;;

# Информация о Smith и Zane будет добавлена позднее.

          * )
   # Выбор по-умолчанию.
   # "Пустой" ввод тоже обрабатывается здесь.
   echo
   echo "Нет данных."
  ;;

esac

tput sgr0                               # Сброс цвета

echo

exit 0

Самая простая и, на мой взгляд, самая полезная escape-последовательность — это «жирный текст», \033[1m … \033[0m. Здесь, комбинация \033 представляет escape-символ, кобинация «[1» — включает вывод жирным текстом, а «[0» — выключает. Символ «m» — завершает каждую из escape-последовательностей.

bash$ echo -e "\033[1mЭто жирный текст.\033[0m"

Простая escape-последовательность, которая управляет атрибутом подчеркивания (в rxvt и aterm).

echo -e "\033[4mЭто подчеркнутый текст.\033[0m"

Ключ -e, в команде echo, разрешает интерпретацию escape-последовательностей.

Другие escape-последовательности, изменяющие атрибуты цвета:

echo -e '\E[34;47mЭтот текст выводится синим цветом.'; tput sgr0
echo -e '\E[33;44m'"желтый текст на синем фоне"; tput sgr0

Команда tput sgr0 возвращает настройки терминала в первоначальное состояние.

Вывод цветного текста осуществляется по следующему шаблону:.

echo -e '\E[COLOR1;COLOR2mКакой либо текст.'

Где «\E[» — начало escape-последовательности. Числа «COLOR1» и «COLOR2», разделенные точкой с запятой, задают цвет символов и цвет фона, в соответствии с таблицей цветов, приведенной ниже. (Порядок указания цвета текста и фона не имеет значения, поскольку диапазоны числовых значений цвета для текста и фона не пересекаются). Символ «m» — должен завершать escape-последовательность.

Обратите внимание: одиночные кавычки окружают все, что следует за echo -e.

Числовые значения цвета, приведенные ниже, справедливы для rxvt. Для других эмуляторов они могут несколько отличаться.

Таблица 33-1. Числовые значения цвета в escape-последовательностях

Цвет Текст Фон
черный 30 40
красный 31 41
зеленый 32 42
желтый 33 43
синий 34 44
пурпурный 35 45
зеленовато-голубой 36 46
белый 37 47
Пример 33-9. Вывод цветного текста

#!/bin/bash
# color-echo.sh: Вывод цветных сообщений.

black='\E[30;47m'
red='\E[31;47m'
green='\E[32;47m'
yellow='\E[33;47m'
blue='\E[34;47m'
magenta='\E[35;47m'
cyan='\E[36;47m'
white='\E[37;47m'


cecho ()                     # Color-echo.
                             # Аргумент $1 = текст сообщения
                             # Аргумент $2 = цвет
{
local default_msg="Нет сообщений."
                             # Не обязательно должна быть локальной.

message=${1:-$default_msg}   # Текст сообщения по-умолчанию.
color=${2:-$black}           # Цвет по-умолчанию черный.

  echo -e "$color"
  echo "$message"
  tput sgr0                  # Восстановление первоначальных настроек терминала.
  return
}


# Попробум что-нибудь вывести.
# ----------------------------------------------------
cecho "Синий текст..." $blue
cecho "Пурпурный текст." $magenta
cecho "Позеленевший от зависти." $green
cecho "Похоже на красный?" $red
cecho "Циан, более известный как цвет морской волны." $cyan
cecho "Цвет не задан (по-умолчанию черный)."
       # Аргумент $color отсутствует.
cecho "\"Пустой\" цвет (по-умолчанию черный)." ""
       # Передан "пустой" аргумент цвета.
cecho
       # Ни сообщение ни цвет не переданы.
cecho "" ""
       # Функции переданы "пустые" аргументы $message и $color.
# ----------------------------------------------------

echo

exit 0

# Упражнения:
# ———
# 1) Добавьте в функцию ‘cecho ()’ возможность вывода «жирного текста».
# 2) Добавьте возможность управления цветом фона.

Запись опубликована в рубрике Linux с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA