文章出處

學過C語言的同學,是否還記得當年各種打印各種星星。今天,我就改一版使用Shell腳本輸出各種星星。

打印單個星號

這個沒啥可說的,直接上代碼:

# cat star.sh

#!/bin/bash

echo "*"

# ./star.sh

*

#

執行后的結果表明,Linux的echo命令打印“*”后會自動換行。無論你在一行中輸入幾個星號,執行到最后一個星號都會自動換行。

打印多行星號

如果想同時在多行中打印星星,例如:每行打印一個打印三行。很明顯,實現這個需要重復執行相同的操作來完成,使用循環結構就可以很輕松的解決該問題。

在Shell 中,循環結構可以使用for、while、和until 等語句來實現。還可以使用continue和break 等語句來在適當的時機跳過或者退出循環體中的某些語句。for循環是最簡單,也是最常用的循環語句。本例中我們使用for循環來實現。

我們多數使用for循環時候,經常使用“帶列表的for循環語句”和“類C語言風格的for循環”,首先,介紹下帶列表的for循環語句的語法:

for variable in {list}

do

command1

command2

...

done

在上面的語法中,variable 稱為循環變量,list 是一個列表,可以是一系列的數字或者字符串,元素之間使用空格隔開。do 和done 之間的所有的語句稱為循環體,即循環結構中重復執行的語句。for 循環體的執行次數與list 中元素的個數有關。

帶列表的for 語句執行時,Shell 會將in 關鍵字后面的list 列表的第1 個元素的值賦給變量variable,然后執行循環體;當循環體中的語句執行完畢之后,Shell 會將列表中的下1個元素的值賦給變量variable,然后再次執行循環體。當list 列表中的所有的元素都被訪問后,for 循環結構終止,程序將繼續執行done語句后面的其他語句。

對于LIST的用法,常用的有以下幾種:

·直接寫:例如:1 2 3

·大括號:例如:{1..3}

·字符串:例如:a b c

·文件名 例如:/etc/*.conf

·命令執行結果:例如:$(find /etc -name "*.conf")

·使用腳本的位置參數:例如:$N和$*

類C語言風格的for循環的語法:

for ((expression1; expression2; expression3));do

command1

command2

...

done

在上面的語法中,for循環語句的條件被兩個小括號包起來。執行條件分為3部分,由兩個分號隔開,第一部分expression1通常是條件變量的初始化語句,第二部分expression2是決定是否執行for循環的條件。當expression2的值為0時,執行整個循環體,當expression2的值為非0時,退出for循環體。第三部分expression3通常用來改變條件變量的值,例如遞增或遞減等。

對于(()) 的用法,例如以下幾種:

·((i=1;i<=5;i++ )) :遞增1

·(( i=5;i>=1;i--)) :遞減1

·(( i=1;i<=7;i=i+2)):遞增2

·((i=$i;i<=$(($i-1));i++)) :數學運算

在我們大致了解了for循環的語法后,我們實現“每行打印一個打印三行”:

*

*

*

代碼如下:

#!/bin/bash

for (( i=1;i<4;i++ ));do

echo "*"

done

#

上述代碼中,我們主要使用for循環控制了要打印星號的行數。

打印矩形:55

打印5行5列如下所示:

*****

*****

*****

*****

*****

實現思路:

主要是使用for循環嵌套,一個for用來定義一行打印for的個數,另一個for定義打印的行數。其中echo的-n參數,主要是為了改變echo默認輸入完畢后自動換行,也就是不要在最后自動換行。這樣是為了實現連續打印星號。

代碼如下:

# cat star.sh

#!/bin/bash

for (( i=1;i<=5;i++ ));do

for (( star=1;star<=5;star++ ));do

echo -n "*"

done

echo

done

#

打印正三角形

打印正三角形如下所示:

*

**

***

****

*****

實現思路:

還是for循環嵌套,一個for用來定義打印的行數,另一個for循環定義每行要打印信號的個數,并且是遞增的方式。

# cat ./star.sh

#!/bin/bash

height=$1

for ((i=1;i<=$height;i++))

do

for ((star=1;star<=$i;star++))

do

echo -n "*"

done

echo ""

done

#

打印倒三角形

打印倒三角形如下所示:

 

*****

****

***

**

*

實現思路:

還是for循環嵌套,一個for用來定義打印的行數,另一個for循環定義每行要打印信號的個數,并且是遞減的方式。

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for ((i=$height;i>=1;i--))

do

for ((star=1;star<=$i;star++))

do

echo -n "*"

done

echo ""

done

#

打印不一樣的三角形

(1)

 

 

*

**

***

****

*****

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for ((i=1;i<=$height;i++))

do

for ((blank=$i;blank<=$(($height-1));blank++))

do

echo -n " "

done

for ((star=1;star<=$i;star++))

do

echo -n "*"

done

echo ""

done

#

(2)

 

*

***

*****

*******

*********

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for ((i=1;i<=$height;i++))

do

for ((blank=1;blank<=$(($height-$i));blank++))

do

echo -n " "

done

for ((star=1;star<=$(($i*2-1));star++))

do

echo -n "*"

done

echo ""

done

#

(3)

 

*********

*******

*****

***

*

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for ((i=$height;i>=1;i--))

do

for ((blank=1;blank<=$(($height-$i));blank++))

do

echo -n " "

done

for ((star=1;star<=$(($i*2-1));star++))

do

echo -n "*"

done

echo ""

done

#

 

打印平行四邊形

打印平行四邊形如下所示:

 

*****

*****

*****

*****

*****

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for (( i=$height;i>=1;i-- ));do

for (( blank=1;blank<=$i;blank++ ));do

echo -n " "

done

for (( star=1;star<=$height;star++ ));do

echo -n "*"

done

echo

done

#

打印菱形

打印菱形如下所示:

 

*

***

*****

*******

*********

*******

*****

***

*

代碼如下:

# cat star.sh

#!/bin/bash

height=$1

for ((i=1;i<=$height;i++))

do

for ((blank=1;blank<=$(($height-$i));blank++))

do

echo -n " "

done

for ((star=1;star<=$(($i*2-1));star++))

do

echo -n "*"

done

echo ""

done

for ((i=$(($height-1));i>=1;i--))

do

for ((blank=1;blank<=$(($height-$i));blank++))

do

echo -n " "

done

for ((star=1;star<=$(($i*2-1));star++))

do

echo -n "*"

done

echo ""

done

#

總結:只要你認真尋找其中的規律,利用其規律可以簡化代碼的行數,利用循環可以輕松的完成你想輸出的形狀。本文中有部分簡單的介紹了代碼的含義,建議初學者閱讀以上代碼范例,明白其實現的原理。

看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170121/92774.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()