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]#
    
  • 相关阅读:
    DOM深度优先遍历算法
    DOM事件
    DOM修改
    DOM的方法和属性
    DOM简介
    JSON.stringify()
    JSON解析
    JSON对象
    JSON语法
    JSON对比XML
  • 原文地址:https://www.cnblogs.com/dalianpai/p/15116143.html
Copyright © 2011-2022 走看看