shell中的函数

Shell函数

系统函数

函数介绍

Shell编程和其他编程语言一样, 有函数, 函数是由若干条shell命令组成的语句块,实现Shell脚本代码重用和模块化编程。

函数分类

  1. 系统函数
  2. 自定义函数

系统函数介绍

系统自带提供的函数, 可以直接使用.

basename系统函数

介绍

basename函数用于获取文件名的函数, 根据给出的文件路径截取出文件名

语法

basename [string / pathname] [suffix]  

根据根据指定字符串或路径名进行截取文件名, 比如: 根据路径"/one/two/aa.txt", 可以截取出aa.txt

suffix: 用于截取的时候去掉指定的后缀名.

演示

[root@rocketmq-nameserver2 shell]#  basename ./test.sh .sh
test
[root@rocketmq-nameserver2 shell]#

dirname系统函数

介绍

从指定的文件绝对路径, 去除文件名,返回剩下的前缀目录路径

语法

dirname 文件绝对路径

演示

[root@rocketmq-nameserver2 shell]# dirname ./test.sh
.
[root@rocketmq-nameserver2 shell]# dirname /root/shell/test.sh
/root/shell
[root@rocketmq-nameserver2 shell]#

自定义函数

介绍

开发人员可以通过自定义开发函数,实现代码重用.

语法

# 函数的定义
[ function ] funname ()
{
    命令
    [return 返回值]

}

# 调用函数
funname 传递参数1 传递参数2 ...
  1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

  2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0~255)

注意

必须在调用函数地方之前,先声明函数,shell脚本是逐行运行, 只要先运行了函数, 后面才可以时使用函数

示例:无参无返回值函数

文件脚本代码

#!/bin/bash
demo()
{
    echo "执行了函数"
}

# 调用函数
demo

运行效果

[root@rocketmq-nameserver2 shell]# ./test.sh
执行了函数

示例:无参有返回值函数

文件脚本代码

#!/bin/bash
sum()
{
    echo "求两个数的和..."
    read -p "输入第一个数字: " n1
    read -p "输入第二个数字: " n2
    echo "两个数字分别为 $n1 和 $n2 "
    return $(($n1+$n2))
}

# 调用函数
sum
echo "两个数字的和为: $? "  # 获取函数返回值

运行效果

[root@rocketmq-nameserver2 shell]# ./test2.sh
求两个数的和...
输入第一个数字: 2
输入第二个数字: 3
两个数字分别为 2 和 3
两个数字的和为: 5
[root@rocketmq-nameserver2 shell]#

示例:有参函数

介绍

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1 表示第一个参数,$2 表示第二个参数...

其他参数介绍

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

演示

文件脚本代码

#!/bin/bash
funParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
# 调用函数
funParam 1 2 3 4 5 6 7 8 9 10 22

运行效果

[root@rocketmq-nameserver2 shell]# ./test3.sh
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 10 !
第十一个参数为 22 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 10 22 !
[root@rocketmq-nameserver2 shell]#

Shell程序与函数的区别

区别

函数和shell程序比较相似,区别在于:
Shell 程序(内置命令和外部脚本文件), 外部脚本文件是在子Shell中运行, 会开启独立的进程运行
Shell函数在当前Shell的进程中运行

演示

fun4.sh脚本文件代码

#!/bin/bash
demo(){
        echo "函数中打印当前进程ID:$$"
}

echo "当前脚本文件(Shell程序)打印当前进程ID:$$"
# 调用函数
demo

运行效果

[root@rocketmq-nameserver2 shell]# ./test4.sh
当前脚本文件(Shell程序)打印当前进程ID:80870
函数中打印当前进程ID:80870
[root@rocketmq-nameserver2 shell]#
原文地址:https://www.cnblogs.com/dalianpai/p/15116143.html