shell編程(二)

case判斷

前面瞭解了shell編程的if判斷,其實除了if判斷,還有case判斷。python

case語法:shell

case VAR in express

case1) command1 ;;編程

case2) command2 ;;函數

case3) command3 ;;spa

...3d

*) command ;;blog

esacci

 

循環

除了判斷,你們知道循環也是程序中很重要的一環,那麼shell裏面的循環是什麼樣的呢?字符串

帶列表的for循環

和python中相似,此類for循環語法結構爲

for var in list:

do

    command

done

list能夠是一串字符,程序會按照空格分隔成多個單詞的列表

 list也能夠是1,2,3,4,5這樣的數字

也能夠是某個命令執行後的結果:

類C語言的for循環

語法:

for ((expression1;condition;expression2))

do

    command

done

這種狀況和C語言的for循環相似,只是有兩個小括號。例如

好,說到這裏,咱們又能夠作一個經典的問題了:打印出9X9乘法口訣表

其中echo -e 表示開啓轉義  \c 表示不換行 \n 表示換行。

上面這幅圖應該讓你們知道有什麼做用了。

咱們看打印的乘法口訣,發現有點沒有對齊,這對強迫症來講,可能沒法忍受,怎麼辦呢?其實在shell中,咱們除了echo能夠打印以外,還能夠用printf 這種C語言的打印方法

你們發現沒有 printf默認沒有換行,這就很不爽了。咱們能夠在打印末尾加上\n

和其餘語言同樣,咱們能夠在%s這裏設置字符串的寬度、左右對齊方式等

前面負號表示左對齊,8表示一個佔多少格,後面的.4表示要展現多少位,小數點也算一位

好,如今咱們再改良一下咱們的乘法口訣

while循環

基本用法:

while expression

do

  command

done

另外,while循環還能夠用來讀取文件

awk指令的做用後面會說。

上面的while循環這樣寫也是OK的

<  表示重定向輸入,就是把test.sh看成前面指令的輸入。

select循環

select循環是一種菜單擴展循環,語法和帶列表的for相似,常和case一塊兒連用

語法規則:

select menu in list

do

    command

done

其中 &&表示接着執行後面的語句 exit 1表示退出腳本,若是是break,就是退出循環,continue指跳過本輪循環,繼續執行。

函數

Shell中的相比於Python的函數,要簡單不少,同時功能也就簡單不少

函數定義語法

#funciton爲關鍵字,能夠省略
function FUNCTION_NAME(){
    command1 #函數體中能夠有多個語句,不容許函數內部爲空
    command2
    ……
}

Shell中的向函數傳遞參數是經過位置參數來實現的

函數的做用就是減小重複代碼,所以咱們須要創建本身的函數庫

新建一個Shell腳本,專門用來存放自定義的函數,通常做爲函數庫裏面的函數如下劃線開頭,以便區分


經過source 或者 . 均可以導入函數庫

 

重定向


以前咱們都用echo來輸出,可是若是咱們想把輸出內容保存到文件中該怎麼作呢?

>

標準輸出覆蓋重定向:將命令的輸出,重定向輸出到其餘的文件當中

>>

標準輸出追加劇定向:將命令的輸出,重定向追加到其餘文件末尾

<

標準輸入重定向:命令將從指定的文件中讀取輸入而不是鍵盤輸入

命令 說明
command > file 將輸出重定向到 file。
command < file 將輸入重定向到 file。
command >> file 將輸出以追加的方式重定向到 file。
n > file 將文件描述符爲 n 的文件重定向到 file。
n >> file 將文件描述符爲 n 的文件以追加的方式重定向到 file。
n >& m 將輸出文件 m 和 n 合併。
n <& m 將輸入文件 m 和 n 合併。
<< tag 將開始標記 tag 和結束標記 tag 之間的內容做爲輸入。

 

 

 

 

 

 

 

 

 

須要注意的是文件描述符 0 一般是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。

相關文章
相關標籤/搜索