zoukankan      html  css  js  c++  java
  • 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]#
    
  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/dalianpai/p/15116143.html
Copyright © 2011-2022 走看看