创建函数
function name {
commands
}
name() {
commands
}
函数返回值
1 . 默认的退出状态码
函数运行结束时会返回一个退出状态码(函数中最后一条命令返回的退出状态码)。
$? 用该变量查看函数的退出状态码。
2 . 使用return命令
return命令允许指定一个整数值来定义函数的退出状态码。
注意:退出状态吗必须是0~255,如果return值 > 256,则会产生一个错误值。
- func abc {
- read -p "Enter a value: " value
- echo "the input value is :"
- echo $value
- }
-
- result=$(abc)
- echo "the new value is $result"
output:
- $: ./test.sh
-
- Enter a value: 100
- the input value is :
- 100
在函数中使用变量
1 . 向函数传递参数
- #!/bin/bash
- function addem {
- if [ $# -eq 0 ] || [ $# -gt 2 ]
- then
- echo -1
- elif [ $# -eq 1 ]
- then
- echo $[ $1 + $1 ]
- else
- echo $[ $1 + $2 ]
- fi
- }
-
- echo -n "Add 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
由于函数使用特殊参数环境变量作为自己的参数值,因此它无法直接获取脚本在命令行中的参数值。
2 . 在函数中处理变量
一般情况下,如果在脚本的主体部分定义了一个全局变量,那么可以在函数内访问它;如果在函数内定义了一个全局变量,可以在脚本主体部分访问它。
定义局部变量:
local temp
local temp=$[ $value + 5 ]
local关键字保证了变量只局限在该函数中。
数组变量和函数
1 . 向函数传递数组参数
- #!/bin/bash
- function testit {
- local new_array
- new_array=`echo $@`
- echo "the new array value is ${new_array[*]}";
- }
-
- myarray=(1 2 3 4 5 6)
- echo "the original array is ${myarray[*]}"
- testit ${myarray[*]}
-
-
- function addarray {
- local sum=0
- local newarray
- newarray=$(echo "$@")
- for value in ${newarray[*]}
- do
- sum=$[ $sum + $value ]
- done
- echo $sum
- }
-
- myarray=(1 2 3 4 5)
- echo "the original array is: ${myarray[*]}"
- arg1=$(echo ${myarray[*]})
- result=$(addarray $arg1)
- echo "the result is $result"
output:
- the original array is 1 2 3 4 5 6
- the new array value is : 1 2 3 4 5 6
- the original array is: 1 2 3 4 5
- the result is 15
2 . 从函数返回数组
从函数里向shell脚本传回数组变量的方法: 函数用echo语句来按正确顺序输出单个数组值,然后脚本再将他们重新放进一个新的数组变量中。
创建库
shell中怎么使用库文件?
a). 首先创建一个库文件
b). 在脚本文件中引用库文件,使用库文件中的函数
关键在于:怎么引用库文件?
使用函数库的关键在于 source命令
:该命令会在当前shell上下文中执行命令,而不是创建一个新shell。
使用 source命令
来在shell脚本中运行库文件脚本,这样就可以使用库中的函数了。
- . ./funcLib #source命令的别名:点操作符
- . /home/rich/libraries/myfuncs
如何直接在命令行上直接运行函数
方法一:直接在命令行上创建函数, 然后在命令行上调用该函数即可。
方法二: 在 .bashrc文件中定义函数 将函数直接定义在这个文件中,这个文件在每次启动一个新的shell的时候,都会由shell重新载入。