如何让我的单行脚本根据条件打印颜色?

时间:2015-07-18 05:29:48

标签: linux bash shell unix scripting

这是我在工作和家庭实验室使用的简单脚本,我希望根据一些条件添加彩色打印。

#!/bin/bash

echo "Enter Search Values Below (regex or plain)"
printf "\n"
echo "Enter IP/Hostname: "
read ip
printf "\n"
echo "Enter Matching Keyword: "
read val1
printf "\n"
echo "Enter Another Keyword (null if none): "
read val2
printf "\n"
echo "Enter Another Keyword (null if none): "
read val3
printf "\n"
echo "Enter Log File: "
read log
awk '$4 ~ /'$ip'/{for(i=1;i<NF;i++){ if( $i ~ '/.*'('$val1'|'$val2'|'$val3')'/'){count[$i]++}} }END{ for(x in count){ print count[x],x}}' /var/log/$log | sed 's/'^[0-9].*[0-9]$'/& >/' | cut -d ':' -f1

它是一个非常简单的单行程序,用于快速计算关键字在给定日志文件中出现的次数。这是示例执行和输出:

sh-3.2# sh /scripts/log_search.sh 
Enter Search Values Below (regex or plain)

Enter IP/Hostname: 
Anonymous.local

Enter Matching Keyword: 
UDP

Enter Another Keyword (null if none): 
Stealth

Enter Another Keyword (null if none): 
netbios

Enter Log File: 
appfirewall.log
1154 > netbiosd
5572 > UDP
598 > Stealth

如您所见,它会返回以下值,并显示给定关键字出现的关键字次数:

    1154 > netbiosd
    5572 > UDP
    598 > Stealth

我想根据数值打印输出颜色。例如,如果该值出现超过3000次以红色打印,则如果1000&lt; x&lt; 3000以绿色打印,任何小于1000打印为白色。我怎样才能做到这一点?我不熟悉彩色打印,我发现了一些使用tput和setaf的建议,但是我不知道如何使用我的一个衬垫来实现它。这最好与sed或awk一起使用吗?如果你能提供一个例子,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以将它们用作颜色变量

# Colors
txt_red="\033[31m"    # Red
txt_green="\033[32m"  # Green
txt_yellow="\033[33m" # Yellow
txt_blue="\033[36m"   # Blue
txt_reset="\033[0m"   # Reset the prompt back to the default color

并使用echo -e

以下是我dotfiles

的示例
if (($? > 0)); then
  echo -e "$txt_red""\n FAIL! There was a problem""$txt_reset"
    exit 1
else
  echo -e "$txt_green""\n Success! No errors\n""$txt_reset"
   exit 0
fi