目录
基本语法:
- function name() {
- statements
- [return value]
- }
function是 Shell 中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,其中 return 是 Shell 关键字,专门用在函数中返回一个值;这一部分可以写也可以不写。
函数调用格式:
方式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
全局作用域:在脚本的其他任何地方都能够访问该变量。
局部作用域:只能在声明变量的作用域内访问。
声明局部变量的格式:
Local variable_name =value
示例
- #!/bin/bash
-
- function fun(){
- #local val=100
- val=100
- echo $val
- return 1
- }
-
- fun
- echo "*****$val"
注意局部变量不能进行命令置换
将当前目录下的普通文件,归档到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