• shell函数使用


    函数定义格式:

    和js有点类似,不过在 shell 中 function 关键字是可选的。

    如:

    sum
    {
        // shell 语句
    }
    

      

    function sum()
    {
        // shell 语句
    }
    

    函数调用方法:

    sum 参数1 参数2 ...

      

    获取函数参数:

    这个和我们以往的经验可能不太一样,shell 中获取函数参数的方式有点特别。

    一般语言中,都是在函数名后面的括号中给定一个变量名去接收函数参数。

    而在 shell 中,获取函数参数的方式是在函数体中使用美元符号加上数字获取,如 $1  获取第一个参数,$2 获取第二个参数,依次类推,但是大于或等于 10 的时候,$ 后面的数字要加上大括号,如 ${10}。

    如:

    sum()
    {
        echo $(($1 + $2))
    }
    

      

    与 $ 有关的其他参数:

    参数处理 说明
    $#   传递给函数的参数总个数
    $*    以一个字符串显示所有的参数
    $$    脚本运行的当前进程的ID号
    $!  后台运行的最后的进程的ID号
    $@  与$*相同,但是在使用时加引号,并在引号中返回每个参数
    $-  显示 shell 使用的当前选项,如:我们使用 set -x 的时候,$- 中会包含 x
    $?  显示上一条命令的退出状态,或者说是返回值,没有返回值并正常运行的时候会返回 0

      

     如:

    #!/bin/bash
    
    funcA()
    {
        return 123
    }
    
    sum()
    {
        echo "参数总个数: $#"
        echo "字符串形式显示所有参数: $*"
        echo "脚本运行的进程ID号: $$"
        echo "字符串形式显示所有参数: $@"
        echo "shell脚本运行的选项: $-"
        funcA
        echo "上一个语句的返回值: $?"
        echo $(($1 + $2))
    }
    
    sum 1 2

    上面的代码会输出:

    参数总个数: 2
    字符串形式显示所有参数: 1 2
    脚本运行的进程ID号: 1408
    字符串形式显示所有参数: 1 2
    shell脚本运行的选项: hB
    上一个语句的返回值: 123
    3
    

      

    脚本中获取任意多的参数:

    #!/bin/bash
    
    sumMulti()
    {
        sum=0
        while [ "$1" != "" ]
        do
            sum=$(($sum+$1))
            shift
        done
        echo $sum;
    }
    
    sumMulti 1 2 3 4 5
    

      

    while 后面的中括号左右需要有空格,语法需要,书写格式没有一般语言自由,

    并且赋值表达式的等号左右不能有空格,有空格的语句,shell会将第一个词作为 shell 命令,然后将第一个空格后面的任何内容当作 shell 命令的参数,这也是 shell 的独特之处,理解这一点对于 shell 的学习非常关键!如上面的 sum=0 如果写作 sum = 0,会提示诸如下面的内容:

    sum: =: No such file or directory
    sum: 0: No such file or directory

    也就是说 shell 在运行这个语句的时候,实际上是把 sum 当作 shell 命令了(当然函数也可以这么调用)。

    shift 的作用是将第一个参数从参数列表中移除。

    获取函数返回值:

    1、通过 return 获取返回值:

    #!/bin/bash
    
    sumMulti()
    {
        sum=0
        while [ "$1" != "" ]
        do
            sum=$(($sum+$1))
            shift
        done
        return $sum;
    }
    
    sumMulti 1 2 3 4 5
    echo "通过return获取返回值: $?"  

    我们可以使用上面提到的 $? 获取上一个函数执行的返回值。

    2、通过 echo 获取返回值:(原理: 我们可以使用反引号获取命令执行的输出内容)

    #!/bin/bash
    
    sumMulti()
    {
        sum=0
        while [ "$1" != "" ]
        do
            sum=$(($sum+$1))
            shift
        done
        echo $sum;
    }
    
    sum=`sumMulti 1 2 3 4 5`
    echo "通过echo获取返回值: $sum"
    

    上面函数调用那一行也可以换做:两种写法差不多

    sum=$(sumMulti 1 2 3 4 5)
    

      

      

  • 相关阅读:
    大众CAN TP2.0协议说明
    统一诊断服务 (Unified diagnostic services , UDS) (七)
    统一诊断服务 (Unified diagnostic services , UDS) (六)
    统一诊断服务 (Unified diagnostic services , UDS) (五)
    统一诊断服务 (Unified diagnostic services , UDS) (四)
    统一诊断服务 (Unified diagnostic services , UDS) (三)
    asp.net 网页拉伸 到300%不变形方法一
    C# WinForm 禁止最大化、最小化、双击标题栏、双击图标等操作记录
    VS系列软件中debug和release编译环境有什么区别
    软件设计开发思想总结
  • 原文地址:https://www.cnblogs.com/eleven24/p/8590234.html
Copyright © 2020-2023  润新知