1.基本的脚本函数
1.1 创建并使用函数
#!/bin/bash
function f1 { #创建方式1:使用function关键字
echo "This is an example of a function1"
}
f2() { #创建方式2:使用括号
echo "This is an example of a function2"
}
f1;f2
2.返回值
- 默认情况下:函数的退出状态码是函数中最后一条命令返回的退出状态码
- 使用return(必须调用完马上获取)
#!/bin/bash # using the return command in a function function dbl { read -p "Enter a value: " value echo "doubling the value" return $[ $value * 2 ] #不能超过255 } dbl echo "The new value is $?"
- 使用函数输出
#!/bin/bash function dbl { read -p "Enter a value: " value echo $[ $value * 2 ] } result=$(dbl) echo "The new value is $result"
3.在函数中使用变量
- 3.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 "Adding 10 and 15: " value=$(addem 10 15) #参数必须与函数放在同一行,无法获取命令行中的参数值 echo $value
- 3.2 处理变量
- 全局:函数外的任意位置定义
- 局部:函数体内,可以使用local修饰
f1(){ local temp = 1; #局部变量 }
4.数组变量和函数
- 4.1 传递数组参数
#!/bin/bash function testit { local newarray newarray=`echo "$@"` echo "The new array value is: ${newarray[*]}" } myarray=(1 2 3 4 5) echo "The original array is ${myarray[*]}" #testit $myarray #这样只传了第一个参数 testit ${myarray[*]}#分开传,函数内合并才是正确方式
- 4.2 返回数组参数
#!/bin/bash function arraydblr { newarray=($(echo "$@")) echo ${newarray[*]} } myarray=(1 2 3 4 5) result=($(arraydblr ${myarray[*]})) echo ${result[*]}
5.函数递归
- 经典递归
function factorial { if [ $1 -eq 1 ];then echo 1 else local temp=$[ $1 - 1 ] local result='factorial $temp' echo $[ $result * $1 ] fi }
6.创建库
假设有一个库myfuns
function addem {
echo $[ $1 + $2 ]
}
可以在其他文件中这样使用
#source ./myfuns #在本地执行
. ./myfuncs #上一句的缩写
result1=$(addem 1 2)
7.在命令行上使用函数
- 7.1 直接在命令行上定义函数(命名后加分号)
- 7.2 在.bashrc 文件中定义函数