文档章节

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

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

码上生花,ECharts 作品展示赛正式启动!>>>

##定义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 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。

© 著作权归作者所有

陶邦仁
粉丝 1715
博文 420
码字总数 1483963
作品 0
海淀
技术主管
私信 提问
加载中
请先登录后再评论。
linux shell 自定义函数(定义、返回值、变量作用域)介绍

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

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

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

紫色的茶碗
2018/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
67
0
Linux之Shell脚本编程(一)

什么是Shell   Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,...

osc_w0tshx3o
2018/09/09
1
0
linux bash 的基础语法

示例均来自网络,附带有原始链接地址,自己练习整理发出,均测试可用 linux shell 基本语法 - 周学伟 - 博客园https://www.cnblogs.com/zxouxuewei/p/6393092.html 变量声明和赋值 定义变量,...

osc_d2xp8kc1
2019/08/21
3
0

没有更多内容

加载失败,请刷新页面

加载更多

UltraEdit for Mac 20.00.0.32 文本编辑器

MacOS上最受欢迎的文本编辑器是哪款?UltraEdit Mac版支HTML、PHP、Perl、Java 和 JavaScript 等众多流行计算机高级语言的程序编辑器,Ultraedit与Notepad ++相比。你可以直接用它来修改exe...

麦克W
17分钟前
10
0
java垃圾回收机制的理解

Java垃圾回收机制算法 标记----清除算法 复制算法 标记----整理算法 分代收集算法 为什么要进行垃圾回收 因为当一个对象的引用不可达,或者一个对象没有任何引用指向它,那么它就没有必要在内...

RandomObject
30分钟前
13
0
Java集合常见面试题

Java集合框架 集合框架底层数据结构总结 Arraylist 与 LinkedList 异同 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全; 底层数据结构: Arraylist 底层使...

JaneRoad
33分钟前
18
0
Makefile中.PHONY的作用是什么? - What is the purpose of .PHONY in a makefile?

问题: What does .PHONY mean in a Makefile? .PHONY在Makefile中是什么意思? I have gone through this , but it is too complicated. 我已经经历过了 ,但是它太复杂了。 Can somebody e......

法国红酒甜
37分钟前
15
0
看了同事的代码,我忍不住写了这份代码指南

❝ 作者:xybaby 链接:https://www.cnblogs.com/xybaby/p/11335829.html ❞ 前言 写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、...

osc_fvp5wdwk
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部