博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux shell函数
阅读量:6080 次
发布时间:2019-06-20

本文共 1470 字,大约阅读时间需要 4 分钟。

  hot3.png

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。

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

#!/bin/sh           fSum 3 2;     function fSum()     {         echo $1,$2;         return $(($1+$2));     }     fSum 5 7;     total=$(fSum 3 2);     echo $total,$?;

              

    sh testfun1.sh
    testfun1.sh: line 3: fSum: command not found
    5,7
    3,2
    1    
    5
    从上面这个例子我们可以得到几点结论:
    1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。
    2、total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。
    3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。
二、函数作用域,变量作用范围
    先我们看一个实例 :

#!/bin/sh         echo $(uname);    declare num=1000;         uname()    {        echo "test!";        ((num++));        return 100;    }    testvar()    {        local num=10;        ((num++));        echo $num;         }         uname;    echo $?    echo $num;    testvar;    echo $num;

    sh testfun2.sh

    Linux
    test!
    100
    1001
    11
    1001
    我们一起来分析下上面这个实例,可以得到如下结论:
    1、定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。
    2、需要获得函数值:通过$?获得
    3、如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。
    4、如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。

转载于:https://my.oschina.net/mosen/blog/291177

你可能感兴趣的文章
SIP入门(二):建立SIPserver
查看>>
Servlet3.0的异步
查看>>
WebService连接postgresql( 失败尝试)
查看>>
从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?...
查看>>
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>