shell(十)函数

简介: 函数:一段代码的集合。 Linux系统shell编程中也是有函数这个概念的。这个东西我们也就很熟悉了。在我接触的其他编程语言中,都是有函数这个概念的,就是有些语言中的叫法不同,有的叫函数,有的叫方法。 一:系统函数:Shell编程中为我们定义了很多系统函数。所谓的系统为我们定义的系统函数,其实就是我们之前学到的系统命令。比如:date,basename,dirname1:date这里首先使用date命令做一下测试,也很简单,正常我们的服务器日志要求是一天生成一个文件。这就涉及到命名的问题,这里使用date就很合适。编辑 she.sh文件

函数:一段代码的集合。

 

Linux系统shell编程中也是有函数这个概念的。这个东西我们也就很熟悉了。在我接触的其他编程语言中,都是有函数这个概念的,就是有些语言中的叫法不同,有的叫函数,有的叫方法。

一:系统函数:

Shell编程中为我们定义了很多系统函数。所谓的系统为我们定义的系统函数,其实就是我们之前学到的系统命令。比如:date,basename,dirname

1:date

这里首先使用date命令做一下测试,也很简单,正常我们的服务器日志要求是一天生成一个文件。这就涉及到命名的问题,这里使用date就很合适。

编辑 she.sh文件

复制代码

vim she.sh

在文件中键入以下内容:

bash

复制代码

#! /bin/bash
filename="$1"_log_$(date +%s)
echo $filename

执行文件she.sh

bash

复制代码

[root@VM_0_4_centos test]# ./she.sh admin
admin_log_1669171427

 2:basename

这个命令就比较有意思了,他会删掉所有的前缀包括最后一个(/)字符,然后将字符串显示出来。

Basename命令可以理解成获取路径中的文件名称,说的再直白点就是获取截取字符串中的最后一个,无论这个文件是否存在。

接下来,我们测试一下:

csharp

复制代码

#  /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是获取文件路径。官方给他的定义是:从给定的包含绝对路径的文件名中取出文件名,返回剩下的路径。说白了,还是截取字符串。

接下来,我们测试一下:

bash

复制代码

# 文件真实存在,绝对路径
[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]#

二:自定义函数:

自定义函数分两部分来介绍:

基本语法:

ini

复制代码

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

 1:无参数函数:

复制代码

vim she.sh

在she.sh文件中键入以下内容:

bash

复制代码

#! /bin/bash
testFunction(){
        echo "这是我的第一个shell函数"
}
echo "函数开始调用"
testFunction
echo "函数结束调用"

调用执行she.sh文件:

bash

复制代码

[root@VM_0_4_centos test]# ./she.sh
函数开始调用
这是我的第一个shell函数
函数结束调用

配合我们之前的read读取控制台命令来使用一下:

在she.sh中键入以下内容:

bash

复制代码

#! /bin/bash
testFunction(){
        echo "请输入第一个数字:"
        read numberOne
        echo "请输入第二个数字:"
        read numberTwo
        return $(($numberOne + $numberTwo))
}
echo "函数开始调用"
testFunction
echo $?
echo "函数结束调用"

调用she.sh文件:

bash

复制代码

[root@VM_0_4_centos test]# ./she.sh
函数开始调用
请输入第一个数字:
2
请输入第二个数字:
2
4
函数结束调用

 

以上大概就是无参数函数的基本使用。

 2:有参数函数:

这个位置要着重的说一下,shell中的函数并不需要在函数体的括号内输入形参,使用我们之前介绍过得$n即可。

这里再重点说一下n的用法:n的用法:n的用法:1表示第一个参数,2表示第二个参数...2表示第二个参数... 2表示第二个参数...10 不能获取第十个参数,获取第十个参数需要10。当n>=10时,需要使用{10}。当n>=10时,需要使用10。当n>=10时,需要使用{n}来获取参数。$0是文件本身的名字,函数调用传递参数使用空格隔开即可。

测试一下:

在she.sh中键入以下内容:

bash

复制代码

#! /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文件:

bash

复制代码

[root@VM_0_4_centos test]# ./she.sh
函数开始调用
文件名称是:./she.sh
第一个参数是:1
第十个参数是:10
第十个参数是:10
函数结束调用

另外,还有几个特殊字符用来处理参数:

参数处理 说明
$# 传递到脚本或函数的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

以上大概就是shell函数的基本使用。

有好的建议,请在下方输入你的评论。

目录
相关文章
|
2月前
|
Shell
Shell函数
Shell函数
20 1
|
3月前
|
运维 Shell C语言
运维(14)- shell函数
运维(14)- shell函数
25 0
|
4月前
|
Unix Shell Linux
|
5月前
|
Shell
shell编程之函数
shell编程之函数
38 1
|
5月前
|
存储 Shell
shell脚本里的函数详解以及示例
shell脚本里的函数详解以及示例
35 1
|
2月前
|
存储 Shell
shell函数介绍
shell函数介绍
25 2
|
6天前
|
存储 安全 Unix
利用Shell指令通过函数获取用户UID
利用Shell指令通过函数获取用户UID
|
28天前
|
Shell
Shell 编程快速入门 之 函数基础知识
Shell 编程快速入门 之 函数基础知识
57 0
Shell 编程快速入门 之 函数基础知识
|
1月前
|
Shell Linux Perl
Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门(第二天学习)
Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门
44 1

相关产品

  • 云迁移中心