我是初学者,我想编写一个脚本(“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
打印三角形。0
i
然后使用将这些0
字符更改为*
字符tr
。
测试:
$ bash script.sh
Number please: 10
********************
******************
****************
**************
************
**********
********
******
****
**
****
******
********
**********
************
**************
****************
******************
********************
也可以看看man printf
。