При выводе информации пользователю в командной строке, хорошей практикой является подсвечивание текста в зависимости от типа. К примеру, ошибки выводить красным текстом, предупреждения жёлтым, а успешные действия зелёным.
Для вывода текста в цвете будет использована команду tput. Изменение цвета достигается с помощью
tput setf N
где N=0-6 номер цвета по базе данных terminfo.
Стандартные для значения:
- 0 — Черный
- 1 — Синий
- 2 — Зеленый
- 3 — Голубой
- 4 — Красный
- 5 — Пурпурный
- 6 — Желтый
- 7 — Белый
Но значения могу отличаться.
Изменение цвета фона достигается с помощью опции setb. Значение цветов такое же, как и у опции setf.
К примеру, для установки жёлтого текста необходимо выполнить
tput setf 6
После этого текст будет выделяться жёлтым. Для возврата в стандартное значение, необходимо выполнить
tput sgr0
А для установки белого фона и синего текста:
tput setf 1 tput setb 7
Теперь настало всё это оформить в виде функции, чтобы каждый раз не выводить руками.
Для этого можно использовать следующую функцию
notice() { yellow=$(tput setf 6) red=$(tput setf 4) green=$(tput setf 2) reset=$(tput sgr0) toend=$(tput hpa $(tput cols))$(tput cub 6) case "$2" in "success") echo -n "${green}${1}" ;; "error") echo -n "${red}${1}" ;; *) echo -n "${yellow}${1}" ;; esac echo -n "${reset}" echo }
В начале происходит установка переменных с цветами для более удобной работы, далее на основе переданного второго аргумента, выводится текст, который передаётся первым аргументов, в нужном цвете. В конце мы сбрасывает до стандартного значения.
Использовать функцию в скрипте можно следующим образом:
notice "text" "type"
К примеру, вывод информации об ошибке будет выглядеть следующим образом:
notice "Error!" "error"