函数:一段代码的集合。
Linux系统shell编程中也是有函数这个概念的。这个东西我们也就很熟悉了。在我接触的其他编程语言中,都是有函数这个概念的,就是有些语言中的叫法不同,有的叫函数,有的叫方法。
一:系统函数:
Shell编程中为我们定义了很多系统函数。所谓的系统为我们定义的系统函数,其实就是我们之前学到的系统命令。比如:date,basename,dirname
1:date
这里首先使用date命令做一下测试,也很简单,正常我们的服务器日志要求是一天生成一个文件。这就涉及到命名的问题,这里使用date就很合适。
编辑 she.sh文件
vim she.sh
在文件中键入以下内容:
#! /bin/bash
filename="$1"_log_$(date +%s)
echo $filename
执行文件she.sh
[root@VM_0_4_centos test]# ./she.sh admin
admin_log_1669171427
2:basename
这个命令就比较有意思了,他会删掉所有的前缀包括最后一个(/)字符,然后将字符串显示出来。
Basename命令可以理解成获取路径中的文件名称,说的再直白点就是获取截取字符串中的最后一个,无论这个文件是否存在。
接下来,我们测试一下:
# /etc/nginx/nginx.conf 这个文件是真实存在的
[root@VM_0_4_centos test]# basename /etc/nginx/nginx.conf
nginx.conf
# /etc/nginx/nginx.conf 这个文件是不存在的
[root@VM_0_4_centos test]# basename /etc/nginx/default.conf
default.conf
通过上方的代码我们大概可以证明,basename只是截取字符串。获取文件名。
3:dirname
这个命令更有意思,和上方我们看的basename是一套,basename是获取文件名,dirname是获取文件路径。官方给他的定义是:从给定的包含绝对路径的文件名中取出文件名,返回剩下的路径。说白了,还是截取字符串。
接下来,我们测试一下:
# 文件真实存在,绝对路径
[root@VM_0_4_centos test]# dirname /etc/nginx/nginx.conf
/etc/nginx
# 文件不存在 ,绝对路径
[root@VM_0_4_centos test]# dirname /etc/nginxsssssss/nginx.conf
/etc/nginxsssssss
# 文件不存在,相对路径
[root@VM_0_4_centos test]# dirname ./etc/nginxsssssss/nginx.conf
./etc/nginxsssssss
[root@VM_0_4_centos test]#
二:自定义函数:
自定义函数分两部分来介绍:
基本语法:
[ function ] funname [()]
{
action;
[return int;]
}
1:无参数函数:
vim she.sh
在she.sh文件中键入以下内容:
#! /bin/bash
testFunction(){
echo "这是我的第一个shell函数"
}
echo "函数开始调用"
testFunction
echo "函数结束调用"
调用执行she.sh文件:
[root@VM_0_4_centos test]# ./she.sh
函数开始调用
这是我的第一个shell函数
函数结束调用
配合我们之前的read读取控制台命令来使用一下:
在she.sh中键入以下内容:
#! /bin/bash
testFunction(){
echo "请输入第一个数字:"
read numberOne
echo "请输入第二个数字:"
read numberTwo
return $(($numberOne + $numberTwo))
}
echo "函数开始调用"
testFunction
echo $?
echo "函数结束调用"
调用she.sh文件:
[root@VM_0_4_centos test]# ./she.sh
函数开始调用
请输入第一个数字:
2
请输入第二个数字:
2
4
函数结束调用
以上大概就是无参数函数的基本使用。
2:有参数函数:
这个位置要着重的说一下,shell中的函数并不需要在函数体的括号内输入形参,使用我们之前介绍过得$n即可。
这里再重点说一下1表示第一个参数,10 不能获取第十个参数,获取第十个参数需要{n}来获取参数。$0是文件本身的名字,函数调用传递参数使用空格隔开即可。
测试一下:
在she.sh中键入以下内容:
#! /bin/bash
isFunction(){
echo "文件名称是:"$0
echo "第一个参数是:"$1
echo "第十个参数是:"$10
echo "第十个参数是:${10}"
}
echo "函数开始调用"
isFunction 1 2 3 4 5 6 7 8 9 10
echo "函数结束调用"
执行she.sh文件:
[root@VM_0_4_centos test]# ./she.sh
函数开始调用
文件名称是:./she.sh
第一个参数是:1
第十个参数是:10
第十个参数是:10
函数结束调用
另外,还有几个特殊字符用来处理参数:
| 参数处理 | 说明 |
|---|---|
| $# | 传递到脚本或函数的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
| $- | 显示Shell使用的当前选项,与set命令功能相同。 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
以上大概就是shell函数的基本使用。
有好的建议,请在下方输入你的评论。