【问题标题】:How do I create a bash script, using loops, to create a Multiplication Table with 5 column/10 row format如何使用循环创建 bash 脚本来创建具有 5 列/10 行格式的乘法表
【发布时间】:2019-03-17 19:25:42
【问题描述】:

这是我所拥有的:

#!/bin/bash

#create a multiplication table 5 columns 10 rows
echo "        Multiplication Table   "
echo "-----+-------------------------"
for x in {0..5}
do
    for  y in {0..10}
    do
        echo -n "$(( $x * $y )) "
    done
    echo
echo "-----+--------------------------"
done

这是我的输出:

     Multiplication Table
-----+-------------------------
0 0 0 0 0 0 0 0 0 0 0
-----+--------------------------
0 1 2 3 4 5 6 7 8 9 10
-----+--------------------------
0 2 4 6 8 10 12 14 16 18 20
-----+--------------------------
0 3 6 9 12 15 18 21 24 27 30
-----+--------------------------
0 4 8 12 16 20 24 28 32 36 40
-----+--------------------------
0 5 10 15 20 25 30 35 40 45 50
-----+--------------------------

这是需要的输出:

             Multiplication Table
----+-------------------------------------
    |   0       1       2       3       4
----+-------------------------------------
0   |   0       0       0       0       0
1   |   0       1       2       3       4
2   |   0       2       4       6       8
3   |   0       3       6       9       12
4   |   0       4       8       12      16
5   |   0       5       10      15      20
6   |   0       6       12      18      24
7   |   0       7       14      21      28
8   |   0       8       16      24      32
9   |   0       9       18      27      36
----+-------------------------------------

我尝试了很多不同的方式来编写这些,但我正在努力寻找一种正确格式化它的方法。第一个非常接近,但我需要它让序列号在顶部和左侧相乘。我不确定如何使用或是否可以使用 seq 命令来实现此目的,或者是否有更好的方法。我还需要用定义行设置表格布局的直列和行,但是我查找 column 命令没有产生正确的输出。

这是我的最终输出和代码:

#!/bin/bash
#create a multiplication table 5 columns 10 rows

#Create top of the table
echo "      Multiplication Table"
echo "----+------------------------------"

#Print the nums at top of table and format dashes
echo -n "    |"; printf '\t%d' {0..5}; echo
echo "----+------------------------------"

#for loops to create table nums
for y in {0..9}
do  
    #Print the side nums and |  
    echo -n "$y   |"
    #for loop to create x 
    for x in {0..5}
    do 
    #Multiply vars, tab for spacing    
        echo -en "\t$((x*y))"
    done
    #Print
    echo
done
#Print bottom dashes for format
echo "----+------------------------------"

我更改了一些 Armali 的代码,只是为了让它更吸引眼球,并且回显被移到了底部(循环外),因此它不会打印那么多行。但再次感谢 Armali,因为我会花更多时间弄清楚如何编写 printf 代码以获取正确的格式。

【问题讨论】:

  • 看看printf。格式化输出应该对布局有很大帮助。
  • 非常感谢Poshi,会做的! printf 已列出,但我还没有编写任何 C 风格的脚本,尽管我会进一步研究它。感谢一个方向的回复和帮助!
  • 您应该将其作为答案发布,而不是将您的解决方案附加到问题中;这样你甚至可以获得声望点。

标签: bash loops row multiple-columns multiplication


【解决方案1】:

我不确定如何使用,或者我是否可以使用 seq 命令来实现此目的……

seq 在这里与 bash 的 序列表达式 结合 printf 没有任何优势。

您的脚本的这个变体产生(使用通常的 8 列选项卡)所需的输出:

#!/bin/bash
#create a multiplication table 5 columns 10 rows
echo "             Multiplication Table"
echo "----+-------------------------------------"
echo -n "    |"; printf '\t%d' {0..4}; echo
echo "----+-------------------------------------"
for y in {0..9}
do  echo -n "$y   |"
    for x in {0..4}
    do  echo -en "\t$((x*y))"
    done
    echo
    echo "----+-------------------------------------"
done

【讨论】:

  • 谢谢 Armali,我会根据我昨晚所做的来运行它,但感谢您代表我付出了这样的努力。我从 python 中了解到 \t = tab 和 \n = new line?,但是 '\t%d' {0..4} 回声线是做什么的?再次感谢,我会尽快发布我的尝试,所以如果您有任何建设性的批评......将不胜感激。
  • 也许我得到了这个......所以 echo -n (包含在一行上)“|”打印我的线字符或管道; printf '\t%d {0..4} (是第一行数字); ???然后在 for 循环中,您使用相同的类型格式和数字之间的制表符,是吗?
  • @Thumper77 - 对,'\t%d' 是printf 的格式(意味着每个argument 都将打印为十进制数前面有一个制表符),而{0..4} 扩展为0 1 2 3 4。是的,在循环中echo 也使用了一个选项卡(需要-e 选项来翻译\t)。
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多