國慶放假到今天,《linux命令行和高級shell編程》初步學習到了第十章。基本上一些簡單的流程控制腳本我能夠編寫出來。今天偶然突發奇想,想把 9*9的乘法表打出來。思考了半天,終於有告終果。可是還不夠成熟。而後到羣裏問了幾位朋友,他們的想法讓我領悟了很多,在此貼出來,僅供參考和學習。linux
要求:打印9*9乘法表。shell
個人方法編程
C式for循環嵌套C式子for循環;bash
C式子for循環裏面嵌套if語句;編輯器
break控制循環;ide
[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
兩個的輸出結果都同樣,以下:this
[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:編輯器的緣由,每行中間都有一行空行隔開呢。這裏沒顯示出來】spa
一網友的解法,他用的是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; }
輸出結果爲
看了他的代碼,我發現他比我代碼好。
好的地方就是他直接把變量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也能夠提早中止循環內的命令,注意不是終止循環!
二者都有其利用的地方,因此在用的時候必定要注意會不會執行某些循環的外部或者內部命令,而這些偏偏不是你想要的!
必定要注意:視狀況而定它的位置。
……
……
就這麼多吧,有什麼之後再慢慢補充 ^_^
——————————————————————————————————————————————