# 函数

# 系统函数

1.1 basename基本语法

basename [pathname/string] [suffix]  (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
1
2
3
4

1.2 案例实操

截取该/home/bigdata/datas/bigdata.txt路径的文件名称

# 不指定后缀
[bigdata@hadoop01 datas]$ basename /home/bigdata/datas/bigdata.txt 
bigdata.txt

# 指定后缀.txt
[bigdata@hadoop01 datas]$ basename /home/bigdata/datas/bigdata.txt .txt
bigdata
1
2
3
4
5
6
7

2.1 dirname基本语法

dirname 文件绝对路径
功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
1
2

2.2 案例实操

获取bigdata.txt文件的路径

[bigdata@hadoop01 datas]$ dirname /home/bigdata/datas/bigdata.txt
/home/bigdata/datas
1
2

# 自定义函数

1.基本语法

[ function ] funname[()]
{
	Action;
	[return int;]
}

# 调用:
funname
1
2
3
4
5
6
7
8

2.经验技巧

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

3.案例实操

计算两个输入参数的和

[bigdata@hadoop01 datas]$ vim sum.sh
  
#!/bin/bash

function sum()
{
        s=0;
        s=$[$1+$2]
        echo $s
}

read -p "请输入参数1:" P1
read -p "请输入参数2:" P2

sum $P1 $P2 #取P1和P2的值

[bigdata@hadoop01 datas]$ bash sum.sh 
请输入参数1:11
请输入参数2:222
233
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20