shell语言打印三角形、平行四边形、梯形、菱形等
这是一个循序渐进的过程,请从第一个开始看
1.打印 ***** ;
line="";ch="\x2a" # "\x2a"表示星号*
for((i=0;i<5;i++));do
line=$line$ch
done
echo -e $line
2.打印 5*5矩形
for((j=0;j<5;j++));do
line="";ch="\x2a"
for((i=0;i<5;i++));do
line=$line$ch
done
echo -e $line
done
3.四种等腰直角三角形
-
直角在左下
for((y=0;y<5;y++));do line="";ch="\x2a" for((x=0;x<=y;x++));do # 看斜线的坐标 line=$line$ch done echo -e $line done
-
直角在左上
for((y=0;y<5;y++));do line="";ch="\x2a" for((x=0;x+y<5;x++));do # 看斜线的坐标 line=$line$ch done echo -e $line done
-
直角在右上
for((y=0;y<5;y++));do line="";ch="\x20" # \x20是空格符 for((x=0;x<5;x++));do if((x==y));then # 当x=y后,空格由星号替代 ch="\x2a" fi line=$line$ch done echo -e $line done
-
直角在右下
for((y=0;y<5;y++));do line="";ch="\x20" for((x=0;x<5;x++));do if((x+y==4));then #过斜线以后 空格由星号替代 ch="\x2a" fi line=$line$ch done echo -e $line done
4.等腰三角形
for((y=0;y<5;y++));do
line="";ch="\x20"
for((x=0;x-y<5;x++));do # 控制右边界
if((x+y==4));then # 控制左边界
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
done
5.等腰三角形(距左一定距离)
left=40;right=40 #左边界顶点位置与右边界顶点位置
for((y=0;y<5;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left));then
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
((left--));((right++)) #控制幅度 也可以写成left-=n;
done
6.等腰梯形
left=35;right=45 #等腰三角形左右边界顶点位置不同则变成了等腰梯形
for((y=0;y<5;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left));then
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
((left--));((right++))
done
7.普通三角形(或普通梯形,只需修改left与right不等)
left=40;right=40;ldlt=-2;rdlt=4 #ldlt rdlt 可以理解成左右边界的斜率
for((y=0;y<5;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left));then
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
((left+=ldlt));((right+=rdlt))
done
8.平行四边形
left=40;right=50;ldlt=-4;rdlt=-4
for((y=0;y<5;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left));then
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
((left+=ldlt));((right+=rdlt))
done
9.菱形
left=40;right=40;ldlt=-3;rdlt=3;maxy=9
for((y=0;y<maxy;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left));then
ch="\x2a"
fi
line=$line$ch
done
echo -e $line
if((y==maxy/2));then
((ldlt*=-1));((rdlt*=-1))
fi
((left+=ldlt));((right+=rdlt))
done
10.空心菱形
left=40;right=40;ldlt=-3;rdlt=3;maxy=9
for((y=0;y<maxy;y++));do
line="";ch="\x20"
for((x=0;x<=right;x++));do
if((x==left||x==right));then
ch="\x2a"
else
ch="\x20"
fi
line=$line$ch
done
echo -e $line
if((y==maxy/2));then
((ldlt*=-1));((rdlt*=-1))
fi
((left+=ldlt));((right+=rdlt))
done