文档章节

Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

陶邦仁
 陶邦仁
发布于 2015/04/22 16:58
字数 587
阅读 172
收藏 9

##定义Shell函数(define function)## 语法:

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

示例(test_fun.sh):

#!/bin/sh
fSum 3 2;
fSum()
{
   echo $1,$2;
   return $(($1+$2));
}

fSum 5 7;
total=$(fSum 3 2);
echo $total,$?;

在此输入图片描述

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

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

##函数作用域,变量作用范围## 示例(test_fun2.sh):

#!/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;

在此输入图片描述

我们一起来分析下上面这个实例,可以得到如下结论:

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

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1588
博文 420
码字总数 1483822
作品 0
海淀
技术主管
linux shell 自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()...

云栖希望。
2017/12/04
0
0
Linux基础之bash脚本进阶篇-函数

函数,什么是函数? 函数的出现最初是在数学中,它的数学定义如下:在某变化过程中有两个变量x,y,按照某个对应法则,对于给定的x,有唯一确定的值y与之对应,那么y就叫做x的函数。 而在计算...

紫色的茶碗
06/26
0
0
shell笔记-local、export用法

shell笔记-local、export用法 2014-08-10 16:27:26 分类: LINUX local一般用于局部变量声明,多在在函数内部使用。 1. Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到s...

月黑风高杀人夜
2015/08/09
0
0
Linux Shell 之 Shell中的函数调用

说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的...

alfredliukai
2015/08/24
0
0
linux shell函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()...

贪睡猫仙mosen
2014/07/15
55
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

es6

在实际开发中,我们有时需要知道对象的所有属性,原生js给我们提供了一个很好的方法:Object.keys(),该方法返回一个数组 传入对象,返回属性名 var obj = {'a':'123','b':'345'};console.l...

不负好时光
24分钟前
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

全部原谅
25分钟前
1
0
web.xml容器加载顺序

容器对于web.xml的加载过程是context-param >> listener >> fileter >> servlet

Aeroever
28分钟前
2
0
Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日...

muzi1994
29分钟前
0
0
J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!...

红薯
31分钟前
506
14

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部