需求:打印一個(gè)正三角形,要求用戶輸入一個(gè)數(shù)字n,然后打印邊長為n個(gè)*字符的正三角形。
需求分析:
1.正三角形,即三條邊長度相同,三個(gè)角都為60°
2.腳本需要用戶交互,所以使用read -p實(shí)現(xiàn),關(guān)鍵代碼
read -p "Please input a number: "n
3. 正三角形,第一行為1個(gè)*,第二行為2個(gè)*,第三行為3個(gè)*,……以此類推,所以打印的*個(gè)數(shù)是遞增的。假設(shè)n為10,關(guān)鍵代碼
n=10 foriin`seq$n` do for j in `seq $i` do echo -n "*" done echo done
結(jié)果如下圖
這段代碼里,用到了echo -n,這是為了不打印換行符,從而實(shí)現(xiàn)第2行里兩個(gè)*連在一起,3行里3個(gè)*連在一起,……
而每行最后面還需要換行,所以腳本里第8行代碼的echo就是為了打印換行符。
4.為了讓打印的三角形美觀,每個(gè)*后面需要帶一個(gè)空格,*和空格就需要兩個(gè)字符。假若如此的話,每行的字符都應(yīng)該是2n個(gè),只不過第一行除了一個(gè)*,其它字符都是空格,第二行除了兩個(gè)*外,其它字符都是空格,當(dāng)然兩個(gè)*之間應(yīng)該有一個(gè)空格。
5. 按上面的規(guī)律,第一行打印1對“*+空格”,第二行打印兩對“*+空格”,第三行打印三對“*+空格”,……
假設(shè)n為10,關(guān)鍵代碼如下:
n=10 for i in `seq $n` do for j in `seq $i` do echo -n "* " done echo done
相比較之前代碼,僅僅是在*后面加了個(gè)空格。效果如下圖:
6.再來說一個(gè)關(guān)鍵問題,第一行在打印“*+空格”之前,應(yīng)該先打印n-1個(gè)空格,然后再打印*,第二行打印n-2個(gè)空格,然后再打印*,第三行打印n-3個(gè)空格,然后打印*,……到了第n行也就是最后一行,打印0(n-n)個(gè)空格。
假設(shè)n為10,關(guān)鍵代碼如下:
n=10 foriin`seq$n` do forkin`seq$[$n-1]-1$i` do echo -n " " done for j in `seq $i` do echo -n "* " done echo done
代碼第4行,seq $[$n-1]-1 $i是為了實(shí)現(xiàn)倒序隊(duì)列,第一次打印9個(gè)空格,第二次打印8個(gè)空格,第三次打印7個(gè)空格,……,第十次打印0個(gè)空格。
所以,最終腳本寫出來是這樣的:
#!/bin/bash read -p "Please input a number: " n for i in `seq $n` do for k in `seq $[$n-1] -1 $i` do echo -n " " done for j in `seq $i` do echo -n "* " done echo done
腳本運(yùn)行結(jié)果如下:
審核編輯:劉清
-
Shell
+關(guān)注
關(guān)注
1文章
366瀏覽量
23410
原文標(biāo)題:Shell腳本習(xí)題--打印三角形
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論