zoukankan      html  css  js  c++  java
  • shell自定义函数

    参考: http://www.cnblogs.com/zhaiqianfeng/p/4621297.html

    “sum=$(fsum 2 5)”这种方式,是将标准输出(echo 出来的东子)传递给主程序的变量而不是返回值

    #!/bin/bash
    function sum(){
    
     val1=$1
    
     val2=$2
    
     val3=$(($1+$2))
    
     echo $val3
    
    }
    
    #Call function with 2 parameters and it return 1 parameter.
    ret_val=$(sum 10 20)
    echo $ret_val
    

      脚本执行结果: ret_val = $(sum 10 20)  将sum 10 20 的输出传递给变量ret_val

    #!/bin/bash 
    prod=1
    twoPow(){
            for((i=0;i<$1;i++));
            do
                    prod=$(($prod*2))
            done
    }
    echo "Enter a number" 
    read num
    twoPow $num
    echo $prod
    

      执行脚本 c.sh

    #!/bin/bash
    
    twoPow()
    {
        prod=1
        for((i=0;i<$1;i++));
        do
            prod=$(($prod*2))
        done
        return $prod
    }
    
    echo "Enter a number"
    read num
    twoPow num
    

      

    ----------------------------------------------------------------------------------------------------------------------------------

    Shell的函数在使用之前必须先定义,定义格式:

    1
    2
    3
    4
    5
    [ function ] funname [()]
    {
        action;
        [return int;]
    }
    • 可以带function fun()定义,也可以直接fun() 定义,不带任何参数。
    • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

    示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fsum 2 5
     
    fsum(){
        echo $1,$2
        return $1+$2
    }
     
    sum=$(fsum 2 5)
    echo $?
    echo "sum=$sum"

    执行输出:

    fsum: not found
    7
    sum=2,5

    从上面这个例子我们可以得到几点结论:

    • 必须在调用函数地方之前,声明函数,shell脚本是逐行运行,这点和编译型语言不通。
    • 函数返回值,只能通过$? 系统变量获得,而“sum=$(fsum 2 5)”这种方式,是将标准输出传递给主程序的变量,而不是返回值!

    Shell函数可以在脚本文件中使用之前定义它,也可以把函数定义在一个独立的文件使用点号(.)命令来引用它。如function.sh和testshell.sh在同一目录中,function.sh

    1
    2
    3
    4
    fsum(){
        echo $1,$2
        return $(($1+$2))
    }

    testshell.sh

    1
    2
    3
    #! /bin/sh
    . ./function.sh
    fsum 2 5

     

  • 相关阅读:
    window.location.href无法跳转的解决办法
    HTTP 错误 405.0
    C# 浅拷贝与深拷贝
    C# .ToString() 格式化
    深入理解AsyncTask
    【转】Android子线程真的不能更新UI么
    深入理解Activity的启动模式
    Android7.0,剪裁后提示“无法保存经过裁剪的图片”
    Android工程改包名
    javah命令,提示“找不到类文件”
  • 原文地址:https://www.cnblogs.com/oxspirt/p/7246075.html
Copyright © 2011-2022 走看看