點擊返回 自學Linux命令行與Shell腳本之路html
16.2-函數中使用變量
1. 向函數傳遞參數
- 函數能夠使用標準參數環境變量來表示命令行傳遞給函數的參數。例如,
函數名在變量$0中定義,函數命令行的其餘參數使用變量$1和$2等定義。
專用變量$#能夠用來肯定傳遞給函數的參數數目。
- 在腳本中指定函數時,必須在函數所在命令行提供參數值。func1 $value1 10
- 因爲函數爲本身的參數值使用專用的參數環境變量,因此函數沒法從腳本命令行直接訪問腳本參數值。
以上含義:函數addem首先檢查傳遞給它的參數數目。程序員
- 若是沒有任何參數,或者參數數目超過兩個,那麼返回值爲-1。
- 若是隻有一個參數,那麼這個參數與本身相加做爲結果。
- 若是有兩個參數,那麼兩個參數相加做爲結果。
2. 在函數中處理變量
變量做用域是shell腳本程序員遇到的常見問題。做用域是變量的可見區域。函數內定義的變量與普通變量有不一樣的做用域,前者能被腳本外部定義的變量所覆蓋。shell
函數使用兩種類型的變量: 函數
2.1 全局變量
全局變量是在shell腳本中到處有效的變量。一樣,若是在函數內部定義了全局變量,那麼腳本的主代碼也能夠獲取該變量的值。
默認狀況下,腳本中定義的變量都是全局變量。在函數外部定義的變量,在函數內部仍能正常訪問。命令行
變量temp已經在函數內部使用,而又在函數外部賦值,因此生成的結果會出人意料。全局變量保存最後一次運算結果的值。3d
2.2 局部變量
- 函數內部使用的變量能夠稱爲局部變量。這隻須要在變量聲明前加上關鍵字:local temp。
- 也能夠給局部變量賦值語句前加上local關鍵字:local temp=$[ $value +5 ]。
- 關鍵字local確保變量僅在函數內部使用。若是腳本在函數外部有同名變量,那麼shell將能區分開這兩個變量。能夠很容易地將函數變量與腳本變量區分開來,而只共享須要的變量。
......htm