我试图在Shell脚本中创建下面的模式设计,我已经编写了下面的代码相同,但我没有得到预期的结果。有人能帮帮忙吗?
期望输出值,在
*
**
***
****
*****
#! /bin/sh
for ((i=1; i<=5; i++))
do
for ((j=1; j<=5; j++))
do
if [ $j > 6-$i ]
then
echo -n "* "
elif [ $j == 6-$i ]
then
echo -n "* "
else
echo -n " "
fi
done
echo
done
电流输出,在
*****
*****
*****
*****
*****
您将需要使用另一个循环来打印前置空格。
for ((i=1;i<=5;i++)); # Loop to create 5 lines of text
do
for((k=1;k<=(5-i);k++)); # Loop to padd prepending spaces
do
printf "%s" " ";
done;
for ((j=1;j<=i;j++)); # Loop to create asterix
do
printf "%s" "*";
done;
printf "n"; # Print the carriage return
done
对代码进行最少的修改以使其正常工作;你需要做数字比较和数字加法,以使你的检查语句工作:
for ((i=1; i<=5; i++)) ; do
for ((j=1; j<=5; j++)) ; do
if [ $j -ge $((6-$i)) ] ; then
echo -n "* "
else
echo -n " "
fi
done
echo
done
新输出:
*
* *
* * *
* * * *
* * * * *
不需要那么多的算术运算,你可以使用printf来添加padding:
n=5
line=''
char='*'
for ((i=1; i<=n; i++)); do
line+=$char
printf "%*sn" $n "$line"
done
如果你想让三角形向另一个方向倾斜:
printf "%-*sn" $n "$line"