返回

在 Bash 中动态生成表格:分步指南

Linux

如何在 Bash(Shell)中创建动态表

在 Bash shell 脚本中,生成动态表格的需求经常出现。为了将数据存储在灵活且可读性高的格式中,我们需要在 Bash 中创建动态表格。本文将指导你逐步解决此问题,并提供一个完整的工作示例。

问题陈述

给定三个变量 $nombreioc$valorioc$recursoioc,我们要将这些变量的值存储在一个表格中,该表格具有以下格式:

+------------+-----------+---------------------+
|    Type    |   Value   | Adicional Resources |
+------------+-----------+---------------------+
| $nombreioc | $valorioc | $recursoioc         |
+------------+-----------+---------------------+

然而,变量的字符数是可变的,因此表格必须动态调整以适应不同的长度。

解决方案

要创建动态表格,我们需要遵循以下步骤:

  1. 计算最长字符长度 :使用 printf 和字符串格式化符计算表中每列的最长字符长度。
  2. 创建分隔线 :创建一个分隔线将表格行分隔开,其长度应等于最长字符长度之和加上列之间的间距。
  3. 创建表头 :创建包含列标题的表头,其格式应与分隔线相同。
  4. 创建表格行 :创建表格行,包含变量的值并使用适当的格式进行调整。

完整代码示例

#!/bin/bash

# 计算最长字符长度
max_type_length=$(printf "%s\n" "$nombreioc" | wc -L)
max_value_length=$(printf "%s\n" "$valorioc" | wc -L)
max_resource_length=$(printf "%s\n" "$recursoioc" | wc -L)

# 创建分隔线
separator="+"
for ((i = 0; i < $max_type_length + $max_value_length + $max_resource_length + 6; i++)); do
    separator+="-"
done
separator+="+"

# 创建表头
header="+------------+-----------+---------------------+"

# 打印表格
printf "%s\n%s\n" "$separator" "$header"
printf "| %-12s | %-9s | %-21s |\n" "Type" "Value" "Adicional Resources"
printf "%s\n" "$separator"
printf "| %-12s | %-9s | %-21s |\n" "$nombreioc" "$valorioc" "$recursoioc"
printf "%s\n" "$separator"

输出示例

如果 $nombreioc$valorioc$recursoioc 的值分别为 "Interface", "10.0.0.1" 和 "eth0", 则输出将如下所示:

+------------+-----------+---------------------+
|    Type    |   Value   | Adicional Resources |
+------------+-----------+---------------------+
| Interface  | 10.0.0.1  | eth0                |
+------------+-----------+---------------------+

结论

通过遵循上述步骤,你可以在 Bash shell 脚本中轻松创建动态表格。这种方法灵活且有效,可处理字符数可变的变量,并生成整洁易读的表格。

常见问题解答

  1. 如何更改表格中列的顺序?

    • 修改 printf 语句中指定列标题的顺序。
  2. 如何更改表格的行数?

    • 添加或删除更多表格行,每个变量值一行。
  3. 如何更改表格的分隔线字符?

    • 修改 separator 变量中使用的字符。
  4. 如何格式化表格中特定列中的值?

    • 使用 printf 中的格式化修饰符,例如 %-12.2f(保留两位小数)。
  5. 如何将表格导出到文件中?

    • 使用 printf 将表格输出到重定向的文件符中,例如 printf ... > output.txt