shell脚本获取命令的输出结果_[shell脚本]表格数据在终端可视化输出

本文介绍了如何使用Shell脚本来获取命令的输出结果,并将其以自定义样式的表格形式在终端进行可视化输出。讨论了shell语法中的参数传递、awk命令的使用以及自定义颜色输出的方法。同时,详细阐述了设计思路,包括计算和绘制表格的全局变量,以及生成表格样式的具体步骤。最后给出了运行方法、使用实例和参考资料。
摘要由CSDN通过智能技术生成

2893048af7494978a5784ed048963bf0.png

最终效果

1. 自定义表格样式

99fc306d1322f73f4d59cff66ee7e77c.png

2. 自定义主题颜色

  • 支持三系普通颜色
  • 支持16色彩虹色
  • 支持单颜色

回顾一下shell语法

1. shell传递参数

我们可以在执行shell脚本时实时传递参数从而指定某些具体的参数(在本例中包括表格的样式、颜色等),脚本中获取参数的格式为$n。其中除n0表示执行的文件名外,1表示第一个参数,2表示第二个参数,以此类推。

  • 每一模式必须以右括号结束
  • 匹配到取值符合某一模式后,执行模式所有命令直到;;
  • 一旦模式匹配则不会执行其他模式
  • 如果无一模式匹配,可以使用*捕获该值
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

在实例中,我们通过第一个参数指定style的值来选择不同的表格形式(具体的表格形式由制表符向量tbs实现)。另外当第一个参数以-h或者--h开头时,我们可以输出help信息:

style="$1"
case $style in
    # 根据第一个参数为-0或-1或-2来实现不同的表格样式, 即给tbs赋不同的值
    -0)  tbs="                ";;
    -1)  tbs="└┴┘├┼┤┌┬┐ ───│││";;
    -2)  tbs="└─┘│┼│┌─┐ ───│││";;
    # 如果第一个参数以%开头, 意味着我们可以外部指定tbs的值
    # 把style变量开头的%去掉赋值给tbs
    "%"*) tbs="${style/"%"/}";;
    -h*|--h*)
        echo '
t [  ---   HELP  ---  ]
t command : draw_table.sh [style] [colors] < <file >
t    pipo : echo -e AtBnatb | draw_table.sh [style] [colors]
t [style] : input 16 characters
t           1~9 is Num. keypad as table,10 is not used
t           11~13 are left,middle,right in a row
t           14~16 are left,middle,right in a column
t
t [colors]: input a list,like "-3,-4,-8" sames "-green,-yellow,-white"
t           It set color,table cross ,font ,middle. Or 033[xxm .
t           And support custom color set  every characters of sytle
t           Like "033[30m,-red,-yellow,,,,,,,,,,,,," sum 16.
        '
        exit
        ;;
esac
# ${var:-DEFAULT}: 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
tbs="${tbs:-"+++++++++,---|||"}"

2. awk命令

awk命令:依次对每一行进行处理,但是相比于 sed更擅长取列,个人感觉是类 SQL的文本搜索工具。

awk的基本形式如下:

awk [-F|-f|-v] 'BEGIN{ 命令 } pattern{ 命令 } END{ 命令 }' file

参数:

-F: 指定分隔符
-f: 调用脚本
-v: 使用var=value的格式定义变量

特殊变量:

NF: 字段数量
NR: 当前处理的行数
FILENAME: 当前文件名

三个语句块:

BEGIN{ 命令 }:    执行前的命令
pattern{ 命令 }:  处理每一行执行的命令
END{ 命令 }:      执行完所有行后的命令

3. 自定义输出颜色

格式如下:

echo -e "033[字背景颜色;字体颜色m字符串033[0m"
# 颜色调用始末是固定的:
033[ ; m …… 033[0m 
# 实例:
echo -e "033[41;36m someword 033[0m"

dd1685b7d806f3695c7c4bafabc7375a.png

设计思路

1. 计算和绘制表格相关的全局变量

  • cols_len[NF]:存储了每一列的最大长度, 每列最大长度等于该列最长的元素的长度
  • rows[NR][NF]:将文件的每行每列的数据记录到rows二维数组中
  • rows[NR][0]rows0列存储前一行和后一行的列数, 用于确定当行的表格样式
  • colors[16]:存储每个制表符对应的着色方案
  • tbs[16]:存储已经着色的制表符,其中制表符样式类似于╚ ╩ ╝ ╠ ╬ ╣ ╔ ╦ ╗ , ═ ═ ═ ║ ║ ║,前1~9个为表格骨架的样式,第10表示着表格元素空格的填充,11~13分别表示上边框、中间和下边框的连接符,第14~16表示左边框、中间和右边框的连接符

2. 生成表格样式

由于涉及到单列,因此需要考虑到单列的情况生成如下一些表格样式变量:

# ------------------------------------------预存所有的表格线, 减少不必要的重复计算------------------------------------------
title_top = line_val("title_top")
title_mid = line_val("title_mid")
title_btm_mid = line_val("title_btm_mid")
title_top_mid = line_val("title_top_mid")
title_btm = line_val("title_btm")
top = line_val("top")
mid = line_val("mid")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值