`

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

阅读更多

 

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

 

一、定义shell函数(define function)

语法:

[ function ] funname [()]

{

    action;

    [return int;]

}

说明:

1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

 

实例(testfun1.sh):

#!/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、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。

2、total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。

 

二、函数作用域,变量作用范围

先我们看一个实例(testfun2.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;
               
						      
sh testfun2.sh
Linux
test!
100
1001
11
1001
 

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

1、定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。

2、需要获得函数值:通过$?获得

3、如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。

4、如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。

 

<script></script>

分享到:
评论

相关推荐

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

    #### 二、函数的作用域和变量作用范围 在Shell脚本中,了解函数的作用域和变量的作用范围非常重要,这直接影响到函数内部和外部变量的行为。 **示例代码** (testfun2.sh): ```sh #!/bin/sh echo $(uname); declare...

    linux shell 自定义函数方法(定义、返回值、变量作用域)

    本文将详细讲解Linux Shell自定义函数的定义、返回值处理以及变量作用域。 **一、定义自定义函数** 在Shell中定义函数有两种基本语法形式: 1. 带`function`关键字: ```bash function funname () { action; ...

    Linux shell 函数

    本文将深入探讨Linux Shell函数的概念、创建、调用以及其在日常系统管理中的应用。 ### 1. Shell函数基础 Shell函数类似于其他编程语言中的函数,它是一段可重复使用的代码块,可以接受参数并返回值。在Shell中,...

    Shell中关于处理方法返回值问题详解

    Shell并不像传统的高级编程语言那样支持直接的函数返回值,但它提供了几种方式来模拟返回值功能。 首先,我们来看一下Shell中的`return`命令。`return`主要用于结束函数的执行,并返回一个数字状态,通常用来表示...

    浅谈Shell中的函数

    默认情况下,函数内部定义的变量是全局的,作用域从定义点开始,直到脚本结束。然而,可以使用`local`关键字声明局部变量,它们只在函数内部有效,不会影响到外部的同名变量。函数参数本身就是局部变量,仅限于函数...

    LINUX与UNIX Shell编程指南16-30.rar

    6. **深入讨论**(025深入讨论.pdf):这部分可能涉及了更高级的主题,如管道(pipe)、重定向(redirect)、子Shell、变量作用域、环境变量以及错误处理等,这些都是编写复杂脚本时需要理解的关键概念。 7. **运行...

    Linux下C语言编程基础

    - **变量作用域**(10_变量作用域.pdf):了解全局变量、局部变量的概念,以及`static`关键字的作用,理解作用域规则对代码管理和调试至关重要。 - **运算符**(2_运算符.pdf):掌握算术、比较、逻辑、位操作等...

    一篇文档,搞定C语言

    函数调用是C语言程序设计的关键,理解函数的参数传递、返回值和作用域对于编写高效代码至关重要。"策略与机智"是编程中需要遵循的原则,意味着在解决问题时既要考虑效率,也要注重灵活性。 面向对象和面向过程是两...

    Linux操作系统下C语言编程入门

    5. 函数:定义、调用函数,参数传递,理解函数的作用域和返回值。 6. 面向过程编程:C语言是面向过程的,重点在于过程的定义和调用。 三、Linux下C语言编程环境搭建 1. 编译器:GCC(GNU Compiler Collection)是...

    fish in flac3d

    ##### 2.2.3 Scope of Variables:变量的作用域 FISH支持局部变量和全局变量。局部变量仅在其定义的函数内可见,而全局变量在整个程序范围内都是可访问的。 ##### 2.2.4 Functions: Structure, Evaluation and ...

    JavaScript语言精粹

    闭包是JavaScript的一个高级特性,它允许函数访问其外部作用域中的变量,即使在外部函数执行完毕后仍能保持该作用域。 3. **对象和原型:** JavaScript中的对象是一种复合数据类型,可以包含属性和方法。JavaScript...

    C&C++函数 手册

    同时,遵循良好的编程规范,如避免全局变量、理解作用域规则、正确处理指针和引用,也是提高代码质量的关键。 总之,《C&C++函数手册》是一本全方位的编程指南,无论是初学者还是经验丰富的开发者,都能从中受益。...

    sit_oper_fun.rar sit_oper_fun.rar sit_oper_fun.rar sit_oper_fun.rar

    - **变量作用域**:函数内部定义的变量只在函数内部可见,除非使用`global`声明。 函数的调用方式如下: ```python result = function_name(value1, value2) ``` Python还支持高阶函数,如: - **map()**: 应用一...

    bash编程指南-中级

    环境变量对所有子进程可见,而局部变量仅在定义它们的函数或作用域内有效。`export`命令用来设置环境变量。 8. **别名与函数** 别名提供了一种简化常用命令的方法,例如`alias ll='ls -l'`。函数则更灵活,可以...

    Tcl教程中文版

    - **Global与Upvar**:讲解全局变量与局部变量的区别,以及如何使用`global`和`upvar`命令处理变量作用域问题。 #### 十四、Tcl数据结构 - **List(列表)**:介绍Tcl中列表数据结构的使用方法,包括创建、访问和...

    宋劲彬的嵌入式C语言一站式编程

    4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 3. for语句 4. ...

    Google 开源项目风格指南 (中文版) 2017版 pdf

    然后,它讨论了作用域的概念,比如局部变量的作用域以及全局变量的使用。类的部分则包括构造函数和析构函数的使用,以及类成员变量的访问控制。在函数部分,规范了函数的声明和定义,包括参数的传递方式和函数的...

Global site tag (gtag.js) - Google Analytics