linux学习(九) shell脚本(6)

来源:互联网 发布:php扩展 版本适配 编辑:程序博客网 时间:2024/06/04 00:57
创建函数1.基本脚本函数1.1创建函数方式一:使用关键字 function,后跟代码块的函数名。function name{commands}name名称需要唯一在一个脚本中,方式二:name(){commands}函数引用,直接调用函数名即可。函数定义不一定位于shell脚本的起始部分,但应该注意,如果在函数定义之前使用函数,会受到错误信息。1.2返回值(1)默认退出状态默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态。函数执行完毕之后可以使用标准变量$? 来获得函数的退出状态。(2)使用return命令bash shell使用return命令以特定退出状态退出函数。return命令可以使用单个整数值来定义函数退出状态,提供了一种通过编程设置函数退出状态的简单方法:function fun1 {read -p"Enter a value:" valueecho "doubling the value"return $[$value * 2]}fun1echo "The new value is : $?"////上例中,将value乘2后的结果作为结束状态返回,通过$?获得结束状态,也就是希望得到的结果。需要注意:(a)在函数完成之后尽快提取返回值,因为再次执行其他命令会覆盖返回值{$?为最近一次命令的返回状态(b)退出状态的取值范围为0-255(c)使用函数输出函数的输出也可以捕获并存放到shell变量中,这种方法可以从函数获取任意类型的输出并给变量赋值:result=`fun1`这个方法可以返回浮点数和字符串,所以这种方法可以非常灵活的从函数返回数据。1.3 在函数中使用变量(1)向函数传递参数函数可以使用标准参数环境变量来表示命令行传递给函数的参数。如,函数名在$0定义,函数命令行的其他参数使用变量$1, $2.等。专用变量$#可以用来确定传递给函数的参数数目(不包括函数名$0)在脚本中指定函数时,必须在函数所在的命令行提供参数。如下:fun1 $value1  10这样,该函数才可以使用参数环境变量获取参数值。使用这种方法向函数传递值。additem () {if [ $# -eq 0 ] || [ $# -gt 2 ]thenecho -1elif [ $# -eq 1 ]thenecho $[$1 + $1]elseecho $[$1 + $2]fi}echo -n "Adding 10 and 15":value=`additem 10 15`echo $value函数的变量$0, $1, $2 等等,不同于脚本主代码的 $0, $1, $2 等等。如果想在函数中使用命令行参数送来的值,需要在调用该函数时,手动传递这些数据。mulitem () {echo $[$1 * $2]}if [ $# -eq 2 ]thenvalue=`mulitem $1 $2`echo result is $valuefi./test.sh 3 4(2)在函数中处理变量全局变量如果脚本的主体定义了全局变量,则在函数内部可以获取这个变量的值;如果在函数内部定义了全局变量,脚本的主体代码也可以获取该变量的值。默认情况下,脚本中定义的变量都是全局变量。在函数外部定义的变量,在函数内部仍能访问。局部变量函数内部使用的变量为局部变量,这只需要在变量声明前加上local关键字 :local value也可以给局部变量赋值语句加上local关键字: local value=$[$value + 2]关键字local确保变量仅在函数内部使用。如果脚本在函数外部有同名变量,则shell能区分开这两个变量。在函数内部操作局部变量时,函数外部的同名变量不受影响。4.数组变量和函数5.使用库文件可以将一个shell脚本中定义多个函数和变量,作为库文件;这样其他shell脚本可以直接引用该库文件。如:test.sh#!/bin/bash#test bash shellmulitem () {echo $[$1 * $2]}additem () {echo $[$1 + $2]}test1.sh#!/bin/bash. ./test.sh #相当于引用库, 注意前面的点操作符+库文件的路径value1=`additem 1 3`value2=`mulitem 3 4`echo "The additem result is : $value1"echo "The mulitem result is : $value2"6.在shell终端中直接使用函数:可以在命令行中定义函数,此次终端会话中,该函数有效,如果关闭了终端,则函数失效。为了下次打开终端仍然能够使用函数,则可以1)将函数定义写在.bashrc中,这样每次打开shell终端之后,仍然能够使用该函数。jason@Ubuntu:~$ function additem { echo $[$1 + $2]; }jason@Ubuntu:~$ additem 10 313这样要求,每条语句后面要有分号隔开;jason@Ubuntu:~$ function mulitem {> echo $[$1 * $2]> }jason@Ubuntu:~$ mulitem 3 4122)提供函数文件:在一个shell 脚本文件中创建函数,将该脚本文件完整路径名添加到.bashrc中。
原创粉丝点击