Как мне создать скрипт bash, используя циклы, чтобы создать таблицу умножения с 5 столбцами / 10 строк формата - PullRequest
0 голосов
/ 17 марта 2019

Вот что у меня есть:

#!/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, чтобы получить правильный формат.

1 Ответ

0 голосов
/ 18 марта 2019

Я не уверен, как использовать, или если я могу использовать, команду 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
...