目录
1 函数的定义
2 函数的调用
3 变量的作用域
4 练习
1 函数的定义
基本语法:
function name() {
statements
[return value]
}
function是 Shell 中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。
2 函数的调用
函数调用格式:
方式1:函数的所有标准输出都传递给了主程序的变量
value_name=`function_name [arg1 arg2 … ]`
方式2: 获取函数的返回的状态
function_name [arg1 arg2 … ]
echo $?
示例
//方式2
#!/bin/bash
function fun(){
echo "hello world"
return 0
}
fun
echo $?
#ret=`fun`
#echo $ret
//运行结果
linux@linux:~$ ./fun.sh
hello world
0
//方式1
#!/bin/bash
function fun(){
echo "hello world"
return 0
}
ret=`fun`
echo "***$ret"
//运行结果
linux@linux:~$ ./fun.sh
***hello world
示例
#!/bin/bash
function fun(){
echo "hello world"
grep "$1" /etc/passwd
echo $2
echo $3
echo $4
return 1
}
ret=`fun linux 1 5 8`
echo "******$ret"
//运行结果
linux@linux:~$ ./fun1.sh
******hello world
linux:x:1000:1000:linux,,,:/home/linux:/bin/bash
1
5
8
3 变量的作用域
全局作用域:在脚本的其他任何地方都能够访问该变量。
局部作用域:只能在声明变量的作用域内访问。
声明局部变量的格式:
Local variable_name =value
示例
#!/bin/bash
function fun(){
#local val=100
val=100
echo $val
return 1
}
fun
echo "*****$val"
注意局部变量不能进行命令置换
4 练习
将当前目录下的普通文件,归档到hello.tar中,把以上功能封装到一个函数中;
#!/bin/bash
function hello(){
filename=`ls`
for file in $filename
do
if [ -f $file ]
then
tar -rf hello.tar $file
fi
done
}
hello
计算下5!(5的阶乘)的结果,并打印出来,把以上功能封装到一个函数中;
#!/bin/bash
function fun(){
i=5
RET=1
while (( i > 1 ))
do
RET=`expr $RET \* $i `
i=`expr $i - 1`
done
echo $RET
return 0
}
fun