? ? ? ?之前江西網絡公司小編跟大家提到過這樣一個知識點,bash shell會將函數當作小型腳本來對待。這意味著你可以像普通腳本那樣向函數傳遞參數。函數可以使用標準的參數環(huán)境變量來表示命令行上傳給函數的參數。比如,函數名會在$0 變量中定義,函數命令行上的任何參數都會通過$1、$2等定義。也可以用特殊變量$#來判斷傳給函數的參數數目。在腳本中指定函數時,必須將參數和函數放在同一行,像這樣:?
? ? ? ?func1 $value1 10?
? ? ? ?然后函數可以用參數環(huán)境變量來獲得參數值。那么如何向函數傳遞參數呢?今天小編就來給大家舉個用此方法向函數傳值的例子,讓大家可以更好的理解。?
? ? ? ?$ cat test6?
? ? ? ?#!/bin/bash?
? ? ? ?# passing parameters to a function ?
? ? ? ?function addem { ? ?
? ? ? ?if [ $# -eq 0 ] || [ $# -gt 2 ] ? ?
? ? ? ?then ? ? ??
? ? ? ?echo -1 ? ?
? ? ? ?elif [ $# -eq 1 ] ? ?
? ? ? ?then ? ? ??
? ? ? ?echo $[ $1 + $1 ] ? ?
? ? ? ?else ? ? ??
? ? ? ?echo $[ $1 + $2 ] ? ?
? ? ? ?fi?
? ? ? ?} ?
? ? ? ?echo -n "Adding 10 and 15: "?
? ? ? ?value=$(addem 10 15)?
? ? ? ?echo $value?
? ? ? ?echo -n "Let's try adding just one number: "?
? ? ? ?value=$(addem 10)?
? ? ? ?echo $value?
? ? ? ?echo -n "Now trying adding no numbers: "?
? ? ? ?value=$(addem)?
? ? ? ?echo $value?
? ? ? ?echo -n "Finally, try adding three numbers: "?
? ? ? ?value=$(addem 10 15 20)?
? ? ? ?echo $value?
? ? ? ?$ ?
? ? ? ?$ ./test6?
? ? ? ?Adding 10 and 15: 25?
? ? ? ?Let's try adding just one number: 20?
? ? ? ?Now trying adding no numbers: -1?
? ? ? ?Finally, try adding three numbers: -1?
? ? ? ?$
? ? ? ?text6腳本中的addem函數首先會檢查腳本傳給它的參數數目。如果沒有任何參數,或者參數多于兩個,addem會返回值-1。如果只有一個參數,addem會將參數與自身相加。如果有兩個參數,addem會將它們進行相加。?
? ? ? ?由于函數使用特殊參數環(huán)境變量作為自己的參數值,因此它無法直接獲取腳本在命令行中的參數值。下面的這個例子將會運行失敗,接下來江西網絡公司小編給大家演示下:?
? ? ? ?$ cat badtest1?
? ? ? ?#!/bin/bash?
? ? ? ?# trying to access script parameters inside a function ?
? ? ? ?function badfunc1 { ? ?
? ? ? ?echo $[ $1 * $2 ]?
? ? ? ?} ?
? ? ? ?if [ $# -eq 2 ]?
? ? ? ?then ? ?
? ? ? ?value=$(badfunc1) ? ?
? ? ? ?echo "The result is $value"?
? ? ? ?else ? ?
? ? ? ?echo "Usage: badtest1 a b"?
? ? ? ?fi?
? ? ? ?$ ?
? ? ? ?$ ./badtest1?
? ? ? ?Usage: badtest1 a b?
? ? ? ?$ ./badtest1 10 15?
? ? ? ?./badtest1: * ?: syntax error: operand expected (error token is "* ?")?
? ? ? ?The result is?
? ? ? ?$?
? ? ? ?盡管函數也使用了$1和$2變量,但它們和腳本主體中的$1和$2變量并不相同。要在函數中使用這些值,必須在調用函數時手動將它們傳過去。?
? ? ? ?$ cat test7?
? ? ? ?#!/bin/bash?
? ? ? ?# trying to access script parameters inside a function ?
? ? ? ?function func7 { ? ?
? ? ? ?echo $[ $1 * $2 ]?
? ? ? ?}
? ? ? ?if [ $# -eq 2 ]?
? ? ? ?then ? ?
? ? ? ?value=$(func7 $1 $2) ? ?
? ? ? ?echo "The result is $value"?
? ? ? ?else ? ?
? ? ? ?echo "Usage: badtest1 a b"?
? ? ? ?fi?
? ? ? ?$ ?
? ? ? ?$ ./test7?
? ? ? ?Usage: badtest1 a b?
? ? ? ?$ ./test7 10 15?
? ? ? ?The result is 150?
? ? ? ?$
? ? ? ?通過將$1和$2變量傳給函數,它們就能跟其他變量一樣供函數使用了。?
? ? ? ?關于向函數傳遞參數的方法就已經介紹完了,相信大家也有了一定的了解,如有大家還有哪些地方不太明白的,可隨時來電和我們聯系,百恒網絡將專業(yè)為您解答。此外,本公司主要從事南昌網站建設、微信開發(fā)、APP開發(fā)等服務,是優(yōu)秀的江西網絡公司之一,經驗豐富,技術嫻熟,如有需要,百恒隨時為您效勞!