星号分级打印

星号分级打印

我是初学者,我想编写一个脚本(“for”循环)-

  • 请求号码
  • 将数字乘以 2 并开始原始星号并如下所示:(例如数字是 4)
********
 ******
  ****
   **
  ****
 ******
********

答案1

#!/bin/bash

read -p 'Number please: ' n

{
        for (( i=0; i<n-1; ++i )); do
                printf '%*.*d\n' "$(( 2*n-i ))" "$(( 2*(n-i) ))" 0
        done

        for (( i=n-1; i>=0; --i )); do
                printf '%*.*d\n' "$(( 2*n-i ))" "$(( 2*(n-i) ))" 0
        done
} | tr 0 '*'

上面的脚本将用户的数字读取到变量中n。然后它在两个算术循环中创建形状for

第一个循环创建形状的上半部分,而第二个循环创建**形状的中半部分和下半部分。

每个循环中的语句都是相同的,只有循环变量printf的值发生变化。i

printf这里使用的格式,意思%*.*d是“根据第一个参数分配空间,以第二个参数的宽度打印一个零填充的整数”。要打印的实际整数是0(第三个参数)。给定的第一个和第二个参数导致它在变化时printf打印三角形。0i

然后使用将这些0字符更改为*字符tr

测试:

$ bash script.sh
Number please: 10
********************
 ******************
  ****************
   **************
    ************
     **********
      ********
       ******
        ****
         **
        ****
       ******
      ********
     **********
    ************
   **************
  ****************
 ******************
********************

也可以看看man printf

相关内容