Linux Shell笔记之函数

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

标签