1.创建函数
#!/bin/bash
function func1 { function关键字创建函数
echo "this is func1"
}
func2() { 接近其它语言形式的函数
echo "this is func2"
}
func1 引用函数
func2
2.函数返回值
1)退出状态码
[root@localhost function]# vi creatfun
#!/bin/bash
function func1 {
echo "this is func1"
}
func2() {
echo "this is func2"
ls badfie
}
func1
echo "func1's exit status is : $?" 使用$?变量存放退出状态码,由函数中的最后一条语句决定,因此使用此方法很危险
func2
echo "func2's exit status is : $?"
2)return命令
#!/bin/bash
func3() {
read -p "enter a number: " value
return $[ $value + 1 ]
}
func3
echo "func3's exit status is $?"
# ./func3
enter a number: 8
func3's exit status is 9 退出状态码需在0~255之间
3)使用函数输出
#!/bin/bash
func3() {
read -p "enter a number: " value
echo $[ $value + 1 ] echo显示值
}
result=`func3` 将函数输出赋值给新变量
echo "new value is $result"
3.函数中使用变量
1)向函数中传递参数
#!/bin/bash
func4() {
echo $[ $1 + $2 ] shell将函数当做小型脚本对待,向函数中传参,与普通脚本一样
}
if [ $# -eq 2 ]
then
value=`func4 $1 $2` 函数不能直接从脚本命令行中获取参数值,需要先在脚本中获取,再手动向函数中传值
echo "new value is $value"
else
echo "usage: func4 a b"
fi
# ./func4 3 4
new value is 7
2)函数中处理变量
[root@localhost function]# vi func5
#!/bin/bash
func5() {
local temp=$[ $value +3 ] local关键字,定义局部变量
result=$[ $temp * 2 ]
}
temp=4
value=6 默认情况下,脚本中定义的任何变量均为全局变量,可以函数内访问
func5
echo "new temp value is $temp"
echo "result value is $result"
3)向函数中传递数组变量
#!/bin/bash
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 old array is : ${myarray[*]}"
result=`addarray ${myarray[*]}` 将数组变量的值分解成单个值然后将这些值作为函数参数使用
echo "final result is $result"
4)递归
#!/bin/bash
factorical() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[ $1 - 1 ]
local result=`factorical $temp`
echo $[ $result * $1 ]
fi
}
read -p "enter a number: " value
result=`factorical $value`
echo "the factorical of $value is $result"
4.创建函数库
1)使用函数库
# cat myfuncs
#!/bin/bash
addem() {
echo $[ $1 + $2 ]
}
multem() {
echo $[ $1 * $2 ]
}
divem() {
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi
}
#!/bin/bash
. ./myfuncs 使用函数的关键字为source命令,快捷别名为.号,在当前shell上下文中执行命令
num1=4
num2=2
add=`addem $num1 $num2`
mul=`multem $num1 $num2`
div=`divem $num1 $num2`
echo "add result is $add"
echo "mult result is $mul"
echo "div result is $div"
2)在.bashrc文件中定义函数
$ vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias ll='ls -al'
. /home/hunterno4/function/myfuncs
$ addem 3 4 如此再次启动shell时,就可以像使用命令一样使用函数了
7
#!/bin/bash
function func1 { function关键字创建函数
echo "this is func1"
}
func2() { 接近其它语言形式的函数
echo "this is func2"
}
func1 引用函数
func2
2.函数返回值
1)退出状态码
[root@localhost function]# vi creatfun
#!/bin/bash
function func1 {
echo "this is func1"
}
func2() {
echo "this is func2"
ls badfie
}
func1
echo "func1's exit status is : $?" 使用$?变量存放退出状态码,由函数中的最后一条语句决定,因此使用此方法很危险
func2
echo "func2's exit status is : $?"
2)return命令
#!/bin/bash
func3() {
read -p "enter a number: " value
return $[ $value + 1 ]
}
func3
echo "func3's exit status is $?"
# ./func3
enter a number: 8
func3's exit status is 9 退出状态码需在0~255之间
3)使用函数输出
#!/bin/bash
func3() {
read -p "enter a number: " value
echo $[ $value + 1 ] echo显示值
}
result=`func3` 将函数输出赋值给新变量
echo "new value is $result"
3.函数中使用变量
1)向函数中传递参数
#!/bin/bash
func4() {
echo $[ $1 + $2 ] shell将函数当做小型脚本对待,向函数中传参,与普通脚本一样
}
if [ $# -eq 2 ]
then
value=`func4 $1 $2` 函数不能直接从脚本命令行中获取参数值,需要先在脚本中获取,再手动向函数中传值
echo "new value is $value"
else
echo "usage: func4 a b"
fi
# ./func4 3 4
new value is 7
2)函数中处理变量
[root@localhost function]# vi func5
#!/bin/bash
func5() {
local temp=$[ $value +3 ] local关键字,定义局部变量
result=$[ $temp * 2 ]
}
temp=4
value=6 默认情况下,脚本中定义的任何变量均为全局变量,可以函数内访问
func5
echo "new temp value is $temp"
echo "result value is $result"
3)向函数中传递数组变量
#!/bin/bash
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 old array is : ${myarray[*]}"
result=`addarray ${myarray[*]}` 将数组变量的值分解成单个值然后将这些值作为函数参数使用
echo "final result is $result"
4)递归
#!/bin/bash
factorical() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[ $1 - 1 ]
local result=`factorical $temp`
echo $[ $result * $1 ]
fi
}
read -p "enter a number: " value
result=`factorical $value`
echo "the factorical of $value is $result"
4.创建函数库
1)使用函数库
# cat myfuncs
#!/bin/bash
addem() {
echo $[ $1 + $2 ]
}
multem() {
echo $[ $1 * $2 ]
}
divem() {
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi
}
#!/bin/bash
. ./myfuncs 使用函数的关键字为source命令,快捷别名为.号,在当前shell上下文中执行命令
num1=4
num2=2
add=`addem $num1 $num2`
mul=`multem $num1 $num2`
div=`divem $num1 $num2`
echo "add result is $add"
echo "mult result is $mul"
echo "div result is $div"
2)在.bashrc文件中定义函数
$ vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
alias ll='ls -al'
. /home/hunterno4/function/myfuncs
$ addem 3 4 如此再次启动shell时,就可以像使用命令一样使用函数了
7