Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 227|回复: 0

[默认分类] linux shell 自定义函数(定义、返回值、变量作用域)介绍

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-8 17:59:22 | 显示全部楼层 |阅读模式
    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。

    一、定义shell函数(define function)
    语法:
    [ function ] funname [()]
    {
         action;
         [return int;]
    }
    说明:
    1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。
    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
       
    实例(testfun1.sh):
    1. #!/bin/sh
    2. fSum 3 2;
    3. function fSum()
    4. {
    5.      echo $1,$2;
    6.      return $(($1+$2));
    7. }
    8. fSum 5 7;
    9. total=$(fSum 3 2);
    10. echo $total,$?;
    11.                  
    12. sh testfun1.sh
    13. testfun1.sh: line 3: fSum: command not found
    14. 5,7
    15. 3,2
    复制代码
    1. 5
    复制代码
      
    从上面这个例子我们可以得到几点结论:
    1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。
    2、total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。
    3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。

    二、函数作用域,变量作用范围
    先我们看一个实例(testfun2.sh ):
    1. #!/bin/sh
    2. echo $(uname);
    3. declare num=1000;
    4. uname()
    5. {
    6.     echo "test!";
    7.     ((num++));
    8.     return 100;
    9. }
    10. testvar()
    11. {
    12.     local num=10;
    13.     ((num++));
    14.     echo $num;
    15. }
    16. uname;
    17. echo $?
    18. echo $num;
    19. testvar;
    20. echo $num;
    21.                
    22.                                                      
    23. sh testfun2.sh
    24. Linux
    25. test!
    26. 100
    27. 1001
    28. 11
    29. 1001
    复制代码
    我们一起来分析下上面这个实例,可以得到如下结论:
    1、定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。
    2、需要获得函数值:通过$?获得
    3、如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。
    4、如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。
    这些,是我在工作中,对linux ,shell 函数使用一些经验总结,有没有提到地方,欢迎交流!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-21 03:04 , Processed in 0.409470 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表