本文旨在通過幾個經(jīng)典的圖案來練習(xí)shell編程骤肛,涉及知識點:for循環(huán),大小比較,基本的數(shù)學(xué)公式計算艇搀,echo小技巧。update:2019-10-17 10:13:54
初次繪制
$ for ((l=1;l<=10;l++)); do for ((w=1;w<=l;w++)); do echo -n "*"; done;echo ; done
*
**
***
****
*****
******
*******
********
*********
$ for ((l=1;l<=10;l++)); do for ((w=1;w<=10-l+1;w++)); do echo -n "*"; done;echo ; done
**********
*********
********
*******
******
*****
****
***
**
*
接下來燕耿,考慮對“看不見的部分”進行輸出中符。
$ for ((l=1;l<=10;l++)); do for ((w=10;w>=1;w--)); do if [ $w -gt $l ]; then echo -n " ";else echo -n "*"; fi; done;echo ; done
*
**
***
****
*****
******
*******
********
*********
**********
$ for ((l=1;l<=10;l++)); do for ((w=1;w<=10;w++)); do if [ $w -lt $l ]; then echo -n " ";else echo -n "*"; fi; done;echo ; done
**********
*********
********
*******
******
*****
****
***
**
*
數(shù)學(xué)知識
上面代碼很亂很蹩腳是么?其實誉帅,數(shù)學(xué)知識淀散,y/x那條線的斜率為正負1,y<x蚜锨,或者y>x档插,兩側(cè)要么是*,要么是空亚再」牛可以把屏幕看成是右轉(zhuǎn)90°的笛卡爾坐標系進行操作。
舉個例子
$for ((x=1;x<=6;x++));do for ((y=1;y<=6;y++));do if [ $y -gt $x ]; then echo -n "*";else echo -n " ";fi;done;echo ;done
*****
****
***
**
*
統(tǒng)一化
x1:6
y1:6
循環(huán)的任務(wù)是鋪滿屏幕氛悬,6x6.
用誰鋪滿则剃,if來控制耘柱。
if y gt 6-x
數(shù)學(xué)計算問題…
公式加減法,賦值棍现,類型轉(zhuǎn)換
數(shù)學(xué)計算:
法1.expr 命令后面跟數(shù)學(xué)公式调煎,但*等特殊符號需轉(zhuǎn)義
法2.在把公式放到$[ ]
的括號里面去。內(nèi)部可以無視空格己肮。
注意:bash shell數(shù)學(xué)運算符只支持整數(shù)運算士袄。z shell(zsh)提供了完整的浮點數(shù)算術(shù)操作。如果需要在shell腳本中進行浮點數(shù)運算,可以考慮看看z shell谎僻。
以對角線斜率為-1時舉例: 關(guān)鍵在于控制y=6-x+1這個等式兩側(cè)娄柳,y≥6-x+1表示為[6-$x+1]
$ for ((x=1;x<=6;x++));do for ((y=1;y<=6;y++));do if [ $y -ge $[6-$x+1] ];then echo -n "*";else echo -n " ";fi;done;echo "";done
*
**
***
****
*****
******
Todo:
- if 后面,邏輯或運算艘绍,繪制空心等邊三角形赤拒,并旋轉(zhuǎn)不同角度
- awk中高級函數(shù)用法。對三角函數(shù)的支持實現(xiàn)r=a(1-sinθ)诱鞠。