Linux学习之路-shell函数

跟其他编程语言一样,Shell也是支持函数的,在函数中定义一次程序控制操作来进行封闭

最简单的函数,无形参,无返回值(shell的函数返回是整形的,表示函数执行的状态值)打印一句hello

function printHello{

str="hello"

echo $str

}

printHello

输出结果:

hello

下面可以直接通过$?来取得函数的返回值

function printHello{

str="hello"

echo $str

}

printHello

echo $?

输出结果:

hello

0


当然,也可以直接用return来给出返回值,不过需要是整型的


function printHello{

str="hello"

echo $str

return 2

}

printHello

输出结果:

hello

2

其实在shell中,变量的作用域并不像c或java那样严格,在c和java中是有严格的变量作用域的,在函数中声明的变量就是局部变量,在函数外部是访问不到的,但是在shell却不是这样的。还是上面的例子

function printHello{

str="hello"

echo $str

}

printHello

echo $str

输出结果:

hello

hello

其实这样,shell函数不能返回其他类型的返回值的问题就解决了,不过还有一个问题就是变量名不能重名,重名就会把值覆盖了



函数还是一个比较重要的内容就是参数的问题

shell的形参是不需要声明的,直接在函数内部用$i来取得就可以了,$0是函数名,从1开始就是输入的参数了

比如用下面的代码来实现一个加法函数

function add {

str="函数名:"

echo $str

echo $0

result=$(($1+$2))

}

add 1 2

echo $result

输出结果:

函数名:

add

3


如果非要使用局部变量的话,可以用local关键词,比如下面的代码

function testVar {

local var="hello"

echo $var

}

testVar

echo $var

输出结果:

hello

(这里会输出一个空行)


输出结果表示$var变量的作用域就是函数内,在函数外访问$var是取不到值的


关于函数的参数是一个数组的时候,如果直接通过$i来访问参数的话,实际上只能取到数据的第一个元素,下面的代码说明了这个问题

function testArray {

arr=$1

echo ${arr[*]}

}

array=(1 2 3 4 5)

testArray $array

输出结果:

1

如果想到在函数中获取数组的话,就需要其他一些操作了,网上比较流行的方法是在函数中重建这个传入的数组,比如说如下的代码例子

function testArray {

local arr=(`echo "$@"`)

echo ${arr[*]}

}

array=(1 2 3 4 5)

testArray ${array[*]}

输出结果:

1 2 3 4 5

其实也可以这样写

function testArray {

local arr=(`echo "$@"`)

echo ${arr[*]}

}

array=(1 2 3 4 5)

testArray ${array[*]}

输出结果:

1 2 3 4 5






你可能感兴趣的:(Linux,学习)