shell - usando expr “tabela de multiplicação”

1

Estou aprendendo shell para criar uma tabela de multiplicação, eu escrevo código assim:

#!/ in/bash

for i in 1 2 3 4 5 6 7 8 9

do

    for j in 1 2 3 4 5 6 7 8 9
    do
            if [ $j -le $i ]
            then
                    echo -ne "$i"X"$j"='expr "$i"*"$j"' "\t"
            else
                    echo
                            break
            fi
            done
    done
echo -ne "\n"

no entanto, recebo a resposta no console assim:

1X1=1*1
2X1=2*1         2X2=2*2
3X1=3*1         3X2=3*2         3X3=3*3
4X1=4*1         4X2=4*2         4X3=4*3         4X4=4*4
...

Espero que a resposta seja assim: "1x1 = 1, 2x1 = 2 ...". Alguém poderia me dizer como modificar esse código?

    
por Lost Vanity 01.01.2017 / 16:11

2 respostas

0

Sim, você pode usar a Expansão Aritmética incorporada do bash $(( )) para fazer algumas contas simples.

Para multiplicação:

echo $(( 6 * 7 ))

Resultado

42

E o seu script ficaria assim:

#!/ in/bash

for i in 1 2 3 4 5 6 7 8 9

do

    for j in 1 2 3 4 5 6 7 8 9
    do
            if [ $j -le $i ]
            then
                    echo -ne "$i"X"$j"=$(($i * $j)) "\t"
            else
                    echo
                            break
            fi
            done
    done
echo -ne "\n"
    
por 01.01.2017 / 16:18
0

Simplificando um pouco a solução, removendo um teste desnecessário:

#!/bin/bash

for (( i = 1; i < 10; ++i )); do
  for (( j = 1; j <= i; ++j )); do
    printf '%dx%d=%-2d  ' "$i" "$j" "$(( i * j ))"
  done
  printf '\n'
done
    
por 04.01.2017 / 20:48

Tags