【前言】
练习shell,提高逻辑能力。
【脚本】
三角形与菱形均通过几个for循环实现,当然也可以用while。
下面是脚本内容:
[三角形]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#!/bin/bash
read
-p
"please input the longs:"
long
for
((i=1;i<=$long;i++))
do
for
((j=$long;j>i;j--))
#控制空格输出
do
echo
-n
" "
done
for
m
in
`
seq
1 $i`
#输出所在行数相同的数字个数,如在第三行,就输出3个3
do
echo
-n
"$i"
done
#for((n=1;n<i;n++))
for
n
in
`
seq
2 $i`
#输出所在行数减一的数字个数,如在第三行,就输出2个三
do
##这连个for循环可以整合到一块,实现每行输出(2*所在行数-1)个数字
echo
-n
"$i"
done
echo
""
done
|
执行后的效果图:
若将上述脚本内层的两个for循环内"echo -n "$i""的$i换为*后,再次执行脚本效果如下:
[菱形]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/bin/bash
read
-p
"please input the longs:"
long
for
((i=1;i<=$long;i++))
#图形上半部分
do
for
((j=$long;j>i;j--))
do
echo
-n
" "
done
for
m
in
`
seq
1 $i`
do
echo
-n
"*"
done
#for((n=1;n<i;n++))
for
n
in
`
seq
2 $i`
do
echo
-n
"*"
done
echo
""
done
for
((i=2;i<=$long;i++))
#图形下半部分
do
for
((j=1;j<i;j++))
do
echo
-n
" "
done
let
k=$long+1-$i
for
m
in
`
seq
1 $k`
do
echo
-n
"*"
done
for
((n=1;n<k;n++))
#for n in `seq 2 $k`
do
echo
-n
"*"
done
echo
""
done
|
改进后:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/bin/bash
read
-p
"please input the longs:"
long
for
((i=1;i<=$long;i++))
#控制行数
do
for
((j=$long;j>i;j--))
#控制空格输出
do
echo
-n
" "
done
let
"g=2*i-1"
for
m
in
`
seq
1 $g`
#控制*数量
do
echo
-n
"*"
done
echo
""
done
for
((i=2;i<=$long;i++))
#控制行数
do
for
((j=1;j<i;j++))
#控制空格输出
do
echo
-n
" "
done
let
"k=2*(long-i)+1"
for
m
in
`
seq
1 $k`
#控制*数量
do
echo
-n
"*"
done
echo
""
done
|
执行后的效果图:
本文转自 xoyabc 51CTO博客,原文链接:http://blog.51cto.com/xoyabc/1727758,如需转载请自行联系原作者