国庆放假到今天,《linux命令行和高级shell编程》初步学习到了第十章。基本上一些简单的流程控制脚本我可以编写出来。今天偶然突发奇想,想把 9*9的乘法表打出来。思考了半天,终于有了结果。但是还不够成熟。然后到群里问了几位朋友,他们的想法让我领悟了不少,在此贴出来,仅供参考和学习。

要求:打印9*9乘法表。

我的方法

C式for循环嵌套C式子for循环;

C式子for循环里面嵌套if语句;

break控制循环;

[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=10; j++))
  do
    if [ $i -lt $j ]
    then
      break
    fi
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


也可用continue来控制循环


[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=10; j++))
  do
    if [ $i -lt $j ]
    then
    #  break
       continue
    fi
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


两个的输出结果都一样,如下:


[root@Jason64-17 ~]# sh pro99.sh
1*1=1
2*1=2   2*2=4
3*1=3   3*2=6   3*3=9
4*1=4   4*2=8   4*3=12  4*4=16
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81
[root@Jason64-17 ~]#


【PS:编辑器的原因,每行中间都有一行空行隔开呢。这里没显示出来】

一网友的解法,他用的是C语言

#include<stdio.h>
int main()
{
int i,j;
for (i=1;i<=9;i++){
   for(j=1;j<=i;j++){
   printf("%d*%d=%d\t",j,i,i*j);
}
printf("\n");
}
system("pause");
return 0;
}


输出结果为

shell学习之突发奇想 ^_^  打印9*9乘法表_continue

看了他的代码,我发现他比我代码好。

好的地方就是他直接把变量i用在了C式子for的迭代循环当中

然后我也做了一下改进。

[root@Jason64-17 ~]# cat pro99.sh
#!/bin/bash
#program
#  this program shows your 9 * 9 = ?
#history
#10/04/13   lisp    first   release
#QQ:1031239088
for ((i=1; i<10; i++))
do
  for ((j=1; j<=$i; j++))
  do
    pro=$[$i * $j]
    echo -ne "$i*$j=$pro\t"
  done
  echo -e "\n"
done


[root@Jason64-17 ~]# sh pro99.sh
1*1=1
2*1=2   2*2=4
3*1=3   3*2=6   3*3=9
4*1=4   4*2=8   4*3=12  4*4=16
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81
[root@Jason64-17 ~]#


这样看起来代码就非常的简化,而且逻辑比第一次的还要清晰。
顿时深感程序的博大精深~~~ 哈哈 -_-


----------------------------------------------------------------------------------------

不过我在网上看到有网友是这么写的。

[root@Jason64-17 ~]# cat wnet.sh
#!/bin/bash
for i in `seq 1 9`
do
 for n in `seq 1 9`
 do
 echo -ne " $n*$i=$(($i*$n))"
  if [ $n -ge $i ]
  then
   echo -e '\n'
  break
 fi
 done
 echo
done


这种for循环是利用的bash里面的for循环,用一个变量依次从变量集合里面读取变量的值;

然后利用if条件语句通过break来控制循环的执行。

但是要提示的是:break和continue两个循环控制命令。

break可以跳出单循环;可以跳出外循环;可以跳出内循环。

continue也可以提前停止循环内的命令,注意不是终止循环!

两者都有其利用的地方,所以在用的时候一定要注意会不会执行某些循环的外部或者内部命令,而这些恰恰不是你想要的!

一定要注意:视情况而定它的位置。

……

……

就这么多吧,有什么以后再慢慢补充 ^_^

——————————————————————————————————————————————