Linux Shell程式設計學習筆記 二 函式

2022-08-10 20:30:12 字數 1738 閱讀 7373

這次我們回顧一下函式的定義,在此之前,如我們學習結構化程式設計一樣,任何語言都脫離不了某種正規化,我們先從這些正規化入手。首先是條件判斷。

具體的結構是:

if condition;

then command;

elif  condition;

then commands;

else

command;

ficondition的編寫可以通過test命令或者是運算元。比如test $m -eq 0 或者是[ $m -eq 0 ]

接著是迭代:迭代的集合類資料以逗號或者是空格分割

data="data1 data2"

迭代的for語句是

for item in $data

dostatements;

done;

在data中預設的分隔符號受ifs變數控制控制例如,你如果要指定:為你的分割符的話只需要定義變數ifs=「:」,這個非常有用,比如我現在要實現乙個功能,要列印所有的使用者所用shell,配置檔案在/etc/passwd,可以執行下面的指令碼:

1 echo "-----------------"

2 for line in `cat /etc/passwd`

3 do 

4   #echo line=$line

5   count=0;

6    ifs=":"

7   for item in $line

8   do

9     if [ $count -eq 6 ];

10         then echo $item

11     fi 

12     let count+=1;

13   done

14 done

當然實現方法多種多樣,你可以有很多方案選擇。

下面輪到非常重要的知識點:函式。

shell在函式定義的時候使用function來定義,而呼叫函式的時候直接使用函式名

我們來看一下:

funtion testfun(){} 或者是 testfun(){}

這個是函式的定義,而在呼叫函式的時候我們直接使用testfun就可以了,不需要加上括號。其實我很喜歡這種設計,對於函式來說無非就是要引數和函式名,我為何要多此一舉寫括號浪費我時間呢~

函式有三個東西是非常關鍵的,名字,引數,還有返回值,這些東西決定了乙個函式的函式簽名

通常情況下函式的返回值為0,屬於正常值.而函式的引數,可以通過函式的$0123來獲取

那麼我是否可以指定引數名呢?~其實是不行的~至少我現在測試出來是不行的.當你需要列印所有的引數的時候可以選擇$*或者$@.

我們說我們採用定義變數的方式是無法被子程序所繼承的,所以我們採用了export的方式來傳遞環境變數,那麼函式是否可以呢?當然也是可以的我們在函式名前面加入export引數.我嘗試了一下export testfun

結果發現子程序中根本沒有這個方法。這是因為它會採用變數的方式來傳遞這種東西,因此~當你要傳遞乙個方法的時候,要在export後面加上引數-f代表這是乙個function.

我們說函式有三要素,函式名,引數,和返回值。我們要怎麼獲得返回值呢?shell裡面定義了乙個$?來儲存返回值,它的功能很像暫存器ax。我們

可以通過返回值來確定程式執行的方向。那麼$?到底是函式的返回值還是程式的返回值呢?其實這兩個並不矛盾,我們知道程式本身的入口也是main函式,當

然我們這麼說並不準確,我只是想說明程式的入口本質上也是函式,所以如果說$?是函式的返回值的話自然也是程式的返回值。

linux Shell程式設計學習筆記

linux shell程式設計 bin bash 這行據說是用來選擇shell的,但是我刪掉試了試沒什麼區別 據說是在某些版本的shell下會出錯。變數定義 如無格式要求可以不定義,如果需要宣告格式用declare命令。declare test test test declare afirx 引數說...

Linux Shell 程式設計學習(二)

case多選結構 基本結構 case word in case 1 command 1 case 2 command 2 case 3 command 3 case n command n esac 乙個demo while 迴圈 while test commands do command sel...

Linux Shell 程式設計學習筆記 1

linux shell命令主要有三種 內部命令,shell函式,和外部命令 內部命令 內部命令是shell直譯器本身包含的命令,在檔案系統中沒有相應的可執行檔案。例如,cd命令和echo命令就是兩個常用的shell內部命令。命令列在執行內部命令時,不需要建立新的程序,當然也就不需要銷毀程序。互動式的...