사용자 인터페이스_08 표시 문자 색 변경하기

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

명령어: echo
키워드: 터미널, 색상
사용처: 메시지 표시에 문자색을 바꾸거나 반전시키는 증 주의를 끌고 싶을 때


실행예제

$ ./color.sh
Script Start.
    Importan Message  <----- 색이 변함
Script End.

스크립트

#!/bin/sh

echo "Script Start."

# 배경을 회색(47), 문자색을 빨강(31)으로 바꿈
echo -e "\033[47;31m Important Message \033[0m"  #--- 1

echo "Script End."

   

해설

이 스크립트는 “Important Message”라는 문자열을 빨강으로 표시합니다. 셸 스크립트에서 문자열을 표시할 때 echo 명령어를 사용합니다. 이때 메시지 일부를 강조하거나 주의를 끌고 싶다면 -e 옵션을 지정해서 이스케이프 시퀀스라는 제어 코드로 표시할 문자에 색을 입힐 수 있습니다. 이스케이프 시퀀스 작성법은 다음처럼 이스케이프를 나타내는 \033[m 사이에 색상 파라미터를 지정합니다.

  • 이스케이프 시퀀스 문법

    \033[파라미터m 표시할 문자열 \033m[0m
    

파라미터를 여러 개 지정할 때는 ; 으로 나열합니다. 1에서는 파라미터로 31번(문자색을 빨강)과 47번(배경색을 흰색)을 합쳐서 지정합니다.

문자색 지정을 초기화하려면 0번을 지정하여 \033[0m 이라고 작성합니다. 이렇게 안하면 그 이후 모든 문자색이 변하므로 1처럼 문자열 끝에 작성하는 것이 일반적입니다. 색 지정 번호는 30번대가 문자색(Foreground Color), 40번대가 배경색(Background Color)입니다.

  • 색 지정값

    구분 검정 빨강 초록 노랑 파랑 보라 하늘색 흰색
    문자 30 31 32 33 34 35 36 37
    배경 40 41 42 43 44 45 46 47

이런 번호는 리눅스라면 “man console_codes”, FreeBSD라면 “man screen”으로 확인 가능한 콘솔 이스케이프 시퀀스* 설명서에 나와 있습니다.

   

주의사항

  • 이스케이프 시퀀스를 쓰면 다양한 색으로 꾸밀 수 있지만 사용 환경에 따라서는 어지럽기만 한 결과가 될 수도 있습니다. 색상 강조는 어디까지나 보조 용도로만 쓰기 바랍니다.

  • 환경에 따라서는 echo 명령어를 쓸 때 이스케이프 시퀀스를 해석하는 -e 옵션이 필요 없기도 합니다. Mac OS X의 sh나 우분투처럼 /bin/dash가 sh인 리눅스가 해당합니다. 이런 환경에서는 다음처럼 -e 옵션이 없어도 echo에서 색상이 변합니다.

    echo "\033[47;31m Important Message \033[0m"