我需要编写一个如下所示的脚本
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 进行循环
这是获得所需输出的一种方法:
$ 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 个字符,或者基于打印的行的一定百分比或其他任何内容,所以我使用了很多有意义的变量名称,这样您就可以看到这个想法并希望对其进行调整以实现您真正想做的任何事情。