博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

shell脚本之函数的使用

Posted on 2017-10-20 10:18  开飞机的贝塔  阅读(1493)  评论(1编辑  收藏  举报

把代码封装成函数,相当于造了一个“轮子”,之后就直接重复使用即可。

 

函数的创建

shell中函数的创建有2种方式

1.使用function关键字

语法

function test {
    ...
}

2.使用括号

语法

test() {
    ...
}

 

函数的调用

记住三点即可。

1.调用方法

直接写函数名

test

2.先定义后调用

3.对于同名的函数,后面的会覆盖前面的

 

函数的返回值

使用默认的退出状态码有bug,所以推荐自定义退出码的方式。

 

test(){
    ...
    return 5
}
test
echo $?

 

 注意点

1.函数一调用完成就马上使用返回值(因为$?会显示上一条语句的返回值)

2.返回值范围在0~255

 

函数做为变量的值

编程语言中,将函数调用赋值给变量是很常见的事,但是shell中的情况有些不太一样

1.当函数调用赋值给变量时,并不会执行函数

2.函数的第一个echo语句的结果会被赋值给变量,剩下echo 语句或者代码正常执行

3.返回值并不会赋值给变量

function test {
	echo 1
	echo 2
	return 6
}
echo 11
t=$(test)
echo "t: $t"
echo hello

 结果

11
t: 1
2
hello

 

向函数传递参数

记住以下几点

1.在脚本中调用函数时,必须将参数和函数调用放在同一行

2.在函数中,可以使用参数的环境变量来获取参数值

3.脚本在命令行中的参数值,需要在调用函数时一起传入

function test {
	echo $1
	echo $2
	return 6
}
test $1 $2

 结果

u
me

注意:

这里函数中$1和$2和调用时的含义不一样。

函数中的$1和$2指向脚本中函数调用时的参数;而调用时的$1和$2指向命令行中的参数

 

在函数中使用变量

在函数中定义局部变量要使用local关键字

 

local test

 

 

向函数中传递数组

将数组中的元素分解开,之后在函数内部进行重组

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[*]}

 结果

The original array is 1 2 3 4 5
The new array value is: 1 2 3 4 5

 

创建库文件

库文件可以实现一次定义函数,终生使用

库文件

a() {
	echo ni
} 

 脚本文件

#!/bin/bash

. ./library

 

在命令行使用函数

单行方式

function test { ...; }

注意:tset之后必须有空格,语句结尾要加;。

多行方式

function test {
>...
>...
>}

注意:如果函数名和内置命令冲突,那么会覆盖内置命令!

 

在.bashrc中使用函数

直接在.bashrc文件中定义函数或者载入库文件即可。

 

使用shtool公共函数库

 下载

传送门:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz
安装

tar xf shtool...
cd shtool...
./configure
make
make test #测试

 

shtool库文件

语法

shtool [options] [function [options] [args]]
shtool platform --help
Usage: shtool platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]