丰富多彩的 bash 脚本

丰富多彩的 bash 脚本

我想编写一个 bash 脚本,将一些信息打印到终端 STDOUT。为了提高可读性和结构性,我想用颜色标记不同的项目并以此方式突出显示它们。

现在,是否有与 Windows-CMD/DOS 命令等效的 Bash 命令来COLOR设置当前使用的背景和字体颜色?完成脚本后,如何将颜色重置回终端默认值?

编辑:
我已阅读Pipeable 命令可以彩色打印吗?,但只有一些答案是用 Bash 编写的,以便可以轻松地将它们包含在我的脚本中。除此之外,那里的答案缺少我想要的以下几点:

  • 更改背景颜色
  • 显示白色前景色,gnome-terminal而是显示设置的默认颜色(对我来说是霓虹绿)
  • 以某种方式使所有可用颜色都可访问,而不仅仅是通过关键字访问一小部分子集。我可以想象,例如,某种 RGB 编码可作为函数参数传递,以便轻松指定颜色。

答案1

获取密码的小脚本;)

#!/bin/bash
#
#   This file echoes a bunch of color codes to the 
#   terminal to demonstrate what's available.  Each 
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a 
#   test use of that color on all nine background 
#   colors (default + 8 escapes).
#

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";
  done
  echo;
done
echo

在此处输入图片描述


从生成前一个脚本的表中可以很容易地读取代码。

\e[1;37m\e[44m

  • \e[1;37m– 前景

  • \e[44m- 背景


一些例子

  • 白色前景

    TOA="\e[0m" # No Color
    whiteForeground="\e[1;37m" 
    echo -e "${whiteForeground}foo${TOA}"
    
  • 蓝底白字

    TOA="\e[0m" # No Color
    whiteOnBlue="\e[1;37m\e[44m" 
    echo -e "${whiteOnBlue}foo${TOA}"
    

以及一个示例 bash 脚本:

red="\e[0;31m"
green="\e[0;32m"
yellow="\e[0;33m"
blue="\e[0;34m"
TOA="\e[0m" # No Color

if [[ $cfg_log_level == "" ]]; then
  cfg_log_level=4
fi

function logError () {
  if [[ $cfg_log_level == "1" ]] || [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${red}$1${TOA}" 1>&2
  fi
}

function logWarn () {
  if [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${yellow}$1${TOA}" 1>&2
  fi
}

function logInfo () {
  if [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${green}$1${TOA}" 1>&2
  fi
}

function logDebug () {
  if [[ $cfg_log_level == "4" ]]; then
    echo -e "${blue}$1${TOA}" 1>&2
  fi
}

答案2

你可以使用tput

  • tput setaf <color>设置前景色
  • tput setab <color>设置背景颜色

颜色是 1 位b,g,r

  0.黑色
  1. 红色
  2. 绿色
  3. 黄色
  4. 蓝色
  5. 洋红色
  6. 青色
  7.白色

tput 可以设置字符的其他属性,如下划线、粗体、闪烁等。man terminfo有关更多信息,请参阅。

我认为使用它的一个好方法是通过语义设置变量。即

startheader=`tput setaf 0``tput setab 7`
endheader=`输入 sgr0`
startprompt=`输入粗体`
endprompt=$endheader

echo ${startheader}标题${endheader}
echo -n ${startprompt}输入值:${endprompt}
读取值

相关内容