Imprime uma string várias vezes

1

Eu quero escrever um script que leve dois parâmetros, uma string e um número. O script com a impressão da seqüência n é arredondado com asteriscos. Então por ex. script "Hello World!" 3 será impresso:

**************
*Hello World!*
*Hello World!*
*Hello World!*
**************

Como posso fazer isso?

    
por Gilles 01.09.2016 / 16:15

2 respostas

1

Podemos criar uma string de * caracteres com o mesmo tamanho da entrada com sed . Nós também podemos fazer um loop muito simples. A saída de cada linha seria então

*$stars*
*$input*
...repeated...
*$stars*

Assim, podemos criar uma função de "saída" simples que apenas coloca o * em volta da string necessária

#!/bin/bash

string=$1
count=$2

stars=$(echo "$string" | sed 's/./*/g')

output() { printf "*%s*\n" "$1"; }

output "$stars"
for ((a=0;a<$count;a++))
{
  output "$string"
}
output "$stars"

por exemplo

./x "Hello world!" 3
**************
*Hello world!*
*Hello world!*
*Hello world!*
**************
    
por 01.09.2016 / 17:54
0

Uma maneira de fazer isso é usar seq para o número de vezes que a string é echo'd e printf com manipulação de string para os asteriscos.

SAY=$1
NUM=$2
CMD="echo *$SAY*"

c="${SAY//[*]}**"
s=$(printf "%-${#c}s" "*")
echo "${s// /*}"

for i in $(seq $NUM)
do $CMD
done

echo "${s// /*}"

Você pode usar esse script com argumentos ./script.sh "Hello World" 3

    
por 01.09.2016 / 16:39