前面瞭解了shell編程的if判斷,其實除了if判斷,還有case判斷。python
case語法:shell
case VAR in express
case1) command1 ;;編程
case2) command2 ;;函數
case3) command3 ;;spa
...3d
*) command ;;blog
esacci
除了判斷,你們知道循環也是程序中很重要的一環,那麼shell裏面的循環是什麼樣的呢?字符串
和python中相似,此類for循環語法結構爲
for var in list:
do
command
done
list能夠是一串字符,程序會按照空格分隔成多個單詞的列表
如
list也能夠是1,2,3,4,5這樣的數字
也能夠是某個命令執行後的結果:
語法:
for ((expression1;condition;expression2))
do
command
done
這種狀況和C語言的for循環相似,只是有兩個小括號。例如
好,說到這裏,咱們又能夠作一個經典的問題了:打印出9X9乘法口訣表
其中echo -e 表示開啓轉義 \c 表示不換行 \n 表示換行。
上面這幅圖應該讓你們知道有什麼做用了。
咱們看打印的乘法口訣,發現有點沒有對齊,這對強迫症來講,可能沒法忍受,怎麼辦呢?其實在shell中,咱們除了echo能夠打印以外,還能夠用printf 這種C語言的打印方法
你們發現沒有 printf默認沒有換行,這就很不爽了。咱們能夠在打印末尾加上\n
和其餘語言同樣,咱們能夠在%s這裏設置字符串的寬度、左右對齊方式等
前面負號表示左對齊,8表示一個佔多少格,後面的.4表示要展現多少位,小數點也算一位
好,如今咱們再改良一下咱們的乘法口訣
基本用法:
while expression
do
command
done
另外,while循環還能夠用來讀取文件
awk指令的做用後面會說。
上面的while循環這樣寫也是OK的
< 表示重定向輸入,就是把test.sh看成前面指令的輸入。
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)。