需要帮助数值三角形shell脚本

问题描述 投票:0回答:1

我需要编写一个如下所示的脚本

         6
        55
      4444
    333333
  22222222
1111111111

任何帮助表示赞赏:)

我尝试从普通三角形开始,但不知道如何管理上述步骤

t=6; for (( i=1; i<=6; i++));do    
    for (( k=$((6-i)); k>0; k-- )); do
        printf " "
    done

    for (( j = 1; j <= $i; j++ ));do
        printf $t
    done

    t=$((t-1))
    echo ""
done

结果:

     6
    55
   444
  3333
 22222
111111

我的问题是从 5 到 4 的步骤对我来说不清楚,因为我需要使用 for 循环来从 +1 到 +2 进行循环

shell sh
1个回答
0
投票

这是获得所需输出的一种方法:

$ cat tst.sh
#!/usr/bin/env bash

maxRows=6
minCharsToPrint=1
maxCharsToPrint=2
finalMinCharsRowNr=2
maxCols=$(( maxRows * maxCharsToPrint - (finalMinCharsRowNr * minCharsToPrint) ))

indent=$maxCols
numCharsToPrint=$minCharsToPrint

for (( rowNr=1; rowNr<=maxRows; rowNr++ )); do

    if (( rowNr > finalMinCharsRowNr )); then
        numCharsToPrint=maxCharsToPrint
    fi
    indent=$(( indent - numCharsToPrint ))

    for (( colNr=1; colNr<=indent; colNr++ )); do
        printf " "
    done

    for (( ; colNr<=maxCols; colNr++ )); do
        printf '%s' $(( maxRows + 1 - rowNr ))
    done
    printf '\n'

done

$ ./tst.sh
         6
        55
      4444
    333333
  22222222
1111111111

当然,我不知道您是否真的想在第二行之后一次从 1 个字符更改为 2 个字符,或者基于打印的行的一定百分比或其他任何内容,所以我使用了很多有意义的变量名称,这样您就可以看到这个想法并希望对其进行调整以实现您真正想做的任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.