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函数的基本使用。

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

目录
相关文章
|
3月前
|
Shell
Shell函数
Shell函数
39 1
|
10月前
|
Unix Shell Linux
|
9月前
|
运维 Shell C语言
运维(14)- shell函数
运维(14)- shell函数
41 0
|
2月前
|
Shell 开发者
Shell 函数深入解析与实践
了解 Shell 函数的基础,包括定义、参数传递及返回值。函数定义有多种语法,如 `function func() {...}` 或 `func() {...}`。参数通过 `$1`, `$2` 等访问,`$@` 代表所有参数。`return` 用于返回退出状态码(0-255),非数值数据需用 `echo`。正确获取函数返回值应立即检查 `$?`,例如:`result=$?`。实践中不断探索和学习!
23 1
|
3月前
|
存储 算法 安全
shell 脚本之 函数与数组
shell 脚本之 函数与数组
|
8月前
|
存储 Shell
shell函数介绍
shell函数介绍
46 2
|
3月前
|
运维 Shell Python
第五章 Shell函数与数组
第五章 Shell函数与数组
|
3月前
|
Shell 应用服务中间件 nginx
shell学习(七) 【shell 函数】
shell学习(七) 【shell 函数】
27 1
|
3月前
|
人工智能 机器人 Shell
【shell】shell函数操作(有参、无参、有返回值、无返回值)
【shell】shell函数操作(有参、无参、有返回值、无返回值)
|
10月前
|
Shell Linux