十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
怎么在shell中定义与调用函数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
公司主营业务:做网站、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出石家庄免费做网站回馈大家。一、Shell函数定义格式
shell函数定义格式,各部分说明如下:
[ function ]等中括号括起来部分----表示可选(即可有可无)
your_function_name部分----为函数名
your_shell_commands部分----为函数代码;shell一般以行为单位,但可以使用“\”换行,也可以在单行内使用“;”作为分隔符
return int部分----shell函数可以有返回值,但只能返回整数不能返回字符串
[ function ] your_function_name() { your_shell_commands; [return int;] }
二、基本函数定义与调用
本节程序实现函数定义与调用,注意调用函数是不要使用括号(即如testFun()是不对的),代码如下:
testFun{ echo "helloworld!" } testFun
运行如下:
三、传递参数调用
3.1 传递参数没有空格
本节程序实现向被调用函数传递参数,$0是运行该脚本的shell传递的参数从$1开始、传递多个参数是以空格分隔,代码如下:
testFun(){ echo $1 } param="helloworld!" testFun $param
运行如下:
除了可以通过$n形式获取第n个参数外,还可以使用以下几个写法:
形式 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
3.2 传递参数有空格
本节程序实现向被调用函数传递有空格的参数,我们将上节“helloworld!”加个空格变为“hello world!”如下:
testFun(){ echo $1 } param="hello world!" testFun $param
运行如下:
可以看到只有空格前的“hello”被打印了出来,空格后的“world!”并没被打印出来(实际上空格后的"world!"被识别成了$2)
要传递有空格的参数也简单,在传递时加上双引号即可(单引号就不被认为是变量了所以不能用单引号),代码如下:
testFun(){ echo $1 } param="hello world!" testFun "$param"
运行如下:
四、获取返回值
4.1 返回整型
testFun(){ echo "helloworld!" return 99 } # 千万要注意shell并不像其他语言直接返回返回值,其返回值放到$?中,这也是为什么只能返回整型的原因 # 所以这种承接方法是错误的,获取到的值是echo打印的内容 # return_value=`testFun` # 以下才是正确获取通过return返回的返回值的正确写法 testFun echo "the return value is: $?"
4.2 返回字符串
我们在前面一直说shell函数只能返回整型不能返回字符串,我们试一下强行返回字符串,代码如下:
testFun(){ echo "helloworld!" return "success" } testFun
运行如下,可以看到运行到return处报错“-bash: return: success: numeric argument required”
所以要通过return返回字符串是没戏的,我们有两个变通的方法,第一种是通过$()获取函数的所有打印,代码如下:
testFun(){ echo "helloworld!" echo "success" } return_value=$(testFun) echo "$return_value"
运行如下:
可以看到成功获取到了‘success“。但同时也可以看到这种做法获取到的被调用函数的所有输出,单要返回值到得单独解析一下
另外的一种做法是直接用一个变量,shell的变量都是全局的在被调用函数中赋值的变量在调用函数处也可获取,代码如下:
testFun(){ echo "helloworld!" return_value="success" } testFun echo $return_value
运行如下:
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。