國慶放假到今天,《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:1031239088for ((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:1031239088for ((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.sh1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*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;}
輸出結果為
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/2024295943-0.jpg" title="c語言輸出" alt="175103354.jpg" />
看了他的代碼,我發現他比我代碼好。
好的地方就是他直接把變數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:1031239088for ((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.sh1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*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/bashfor 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 echodone
這種for迴圈是利用的bash裡面的for迴圈,用一個變數依次從變數集合裡面讀取變數的值;
然後利用if條件陳述式通過break來控制迴圈的執行。
但是要提示的是:break和continue兩個迴圈控制命令。
break可以跳出單迴圈;可以跳出外迴圈;可以跳出內迴圈。
continue也可以提前停止迴圈內的命令,注意不是終止迴圈!
兩者都有其利用的地方,所以在用的時候一定要注意會不會執行某些迴圈的外部或者內部命令,而這些恰恰不是你想要的!
一定要注意:視情況而定它的位置。
……
……
就這麼多吧,有什麼以後再慢慢補充 ^_^
——————————————————————————————————————————————
本文出自 “lisp的營運之路” 部落格,請務必保留此出處http://lspgyy.blog.51cto.com/5264172/1304627