shell脚本—小练习之99乘法表
零碎碎的知识点
- echo
echo -n :取消换行
echo -e :启用反斜杠转义的解释
\t:横向制表
\v:纵向制表 - shell脚本 for循环嵌套语法
for i(变量) in { 参数a..参数b}
do
for j(变量) in {参数c..参数d}
do
任务
done
done
思路?????
步骤一:
99乘法表中开始为1x1=1,最后的值为 9x9=81,所以需要两个变量i,j。且i和j的值由1都变为i,并且做了乘法运算。
#!/bin/bash
#99
for i in {1..9}
do
for j in {1..9}
do
echo "$i*$j=$[i*j]"
done
done
执行结果,不是我们想要的。首先运算结果上有很多冗余数据,其次显示视图不符合要求。
步骤二:删除冗余数据
分析可知,冗余数据出现在每次i都循环了9次。如果使得j<=i时,便不会出现冗余数据
#!/bin/bash
#99
for i in {1..9}
do
for j in {1..9}
do
if [ $j -le $i ];then
echo "$j*$i=$[i*j]"
fi
done
done
由执行结果可以看出,冗余数据已经被删除。但是结果并未分为9行。
步骤三:分行处理,只需要在内层循环结束时,输出一个空行。
#!/bin/bash
#99
for i in {1..9}
do
for j in {1..9}
do
if [ $j -le $i ];then
echo "$j*$i=$[i*j]"
fi
done
echo
done
由图可知,目前分行已经基本ok,但是我们希望每一列数能单独在一行,而不是分为好几行。
步骤四:取消每次循环换行 echo -n
#!/bin/bash
#99
for i in {1..9}
do
for j in {1..9}
do
if [ $j -le $i ];then
echo -n "$j*$i=$[i*j]"
fi
done
echo
done
由图可知,基本上已经实现了我们的需求。但是看起来仍不太美观。
步骤五:echo -e \t。加入制表符,使结果更加美观。空格也可以,但是会出现不能对齐的效果。
#!/bin/bash
#99
for i in {1..9}
do
for j in {1..9}
do
if [ $j -le $i ];then
echo -n -e "$j*$i=$[i*j]\t"
fi
done
echo
done
至此我们的99乘法表制作完成,谢谢观看。