十三年专注于网站建设与互联网应用开发,低调、有情怀的网络应用服务商!
南昌百恒科技微信公众号 扫一扫关注
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒科技微信公众号

shell脚本中向函数传递参数的方法

百恒 2017-08-21 15:21:59 7579
       之前江西网络公司小编跟大家提到过这样一个知识点,bash shell会将函数当作小型脚本来对待。这意味着你可以像普通脚本那样向函数传递参数。函数可以使用标准的参数环境变量来表示命令行上传给函数的参数。比如,函数名会在$0 变量中定义,函数命令行上的任何参数都会通过$1、$2等定义。也可以用特殊变量$#来判断传给函数的参数数目。在脚本中指定函数时,必须将参数和函数放在同一行,像这样: 
       func1 $value1 10 
       然后函数可以用参数环境变量来获得参数值。那么如何向函数传递参数呢?今天小编就来给大家举个用此方法向函数传值的例子,让大家可以更好的理解。 
       $ 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会将它们进行相加。 
       由于函数使用特殊参数环境变量作为自己的参数值,因此它无法直接获取脚本在命令行中的参数值。下面的这个例子将会运行失败,接下来江西网络公司小编给大家演示下: 
       $ 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变量传给函数,它们就能跟其他变量一样供函数使用了。 
       关于向函数传递参数的方法就已经介绍完了,相信大家也有了一定的了解,如有大家还有哪些地方不太明白的,可随时来电和我们联系,百恒网络将专业为您解答。此外,本公司主要从事南昌网站建设、微信开发、APP开发等服务,是优秀的江西网络公司之一,经验丰富,技术娴熟,如有需要,百恒随时为您效劳!
400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
备案专线 备案专线
 
售后服务 售后服务
 
×