函数的调用

把那些在脚本中重复出现并且没有任何改变的代码,封装起来,在适当的场景中调用执行;
程序员将这种被封装起来的代码称为功能体,或者叫模块;
function —— 函数

在shell脚本编程中,函数是由若干条shell命令组成的语句块;通常用于代码重用和模块化封装;

函数里面的内容和shell程序形式上是一致的;不同之处就是,shell代码可以直接被执行;而函数中的内容,不能独立执行,只有被调用的时候才执行;

函数是在shell程序的当前shell中运行的;
bash
 bash script_file
 function

定义函数:
 函数是由两部分组成:
  函数名称 + 函数体(能够实现独立功能的shell语句块)

语法一:
  function func_name {
   函数体
  }

语法二:
  func_name() {
   函数体
  }
  注意:函数名和()之间不能加空白字符;

注意:函数可以在交互式环境下定义,也可以在脚本中定义;

函数的使用
 函数在定义的时候,其函数体中包含的所有命令均不会被执行;只有函数被调用的时候,才会执行其中的命令语句;

调用方式:通过直接给出函数名称的方式调用;

有很多的函数是存放于专门用于保存函数的文件中;如果想要调用这样的文件中保存的函数,使用source命令(.)加载文件,然后再以直接给出函数名称的方式调用函数;

使用set命令可以查看所有当前shell中生效的函数;
使用unset命令可以撤销已经定义的函数;

函数的返回值:
 两种返回值:
  函数的执行结果的返回值:
   1.在函数体中使用了echo或printf命令输出的结果;
   2.在函数体中某些命令输出的结果;
  函数的状态返回值:
   1.函数中最后一条命令的执行状态返回值;
   2.自定义退出状态码:
    return [n]
     n:0-255 (1 2 127尽可能不使用)
     0: 表示无错误返回
     1-255:有错误返回

注意:只要函数在执行时,遇到了return命令,不管函数中的命令语句是否全部执行完成,立刻退出函数;

函数的生命周期:
 从被调用开始,到遇到return命令或全部的语句执行完成为止;

函数的实参
 在函数体中,可以使用$1,$2,..位置变量为函数提供参数;还可以使用$*或[email protected]的方式引用所有位置参数;还可以使用$#计算为函数传递的参数个数;

在调用函数的时候,直接在函数名称后面以空白字符分隔多个参数即可;比如:func_name arg1 arg2 ...

传递给函数参数的位置参数,是调用函数的时候,函数名称后面的以空白字符分隔的字符串序列;跟脚本的位置参数不是一回事;

变量:
 shell中的变量为弱变量
  1.无需事先声明
  2.无需指定变量类型,默认为字符型

变量分类:
  环境变量:
   当前shell及子shell
  本地变量:
   当前shell
  局部变量:
   local VAR_NAME=VALUE
   当前函数体
  位置变量
  特殊变量

建议:手动撤销自己定义或声明的所有变量;

函数的递归调用
 简单来说,就是在函数体中调用函数自身;

时间: 2024-12-19 13:48:31

函数的调用的相关文章

深入剖析php执行原理(4):函数的调用

本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节再根据这些op指令,来剖析php运行时的细节. 源码依然取自php5.3.29. 函数调用 回顾之前用的php代码示例: <?php function foo($arg1) { print($arg1); } $bar = 'hello php'; foo($bar); 在函数编译一章里已经分析过,

javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta chaset="UTF-8"> 5 <title></title> 6 </head> 7 <body

MFC浅析(7) CWnd类虚函数的调用时机、缺省实现

CWnd类虚函数的调用时机.缺省实现 FMD(http://www.fmdstudio.net) 1. Create 2. PreCreateWindow 3. PreSubclassWindow 4. PreTranslateMessage 5. WindowProc 6. OnCommand 7. OnNotify 8. OnChildNotify 9. DefWindowProc 10. DestroyWindow 11. PostNcDestroy CWnd作为MFC中最基本的与窗口打交

函数的调用优化

函数的调用优化 在类中有四大成员函数,构造函数,拷贝构造函数,赋值函数和析构函数,在类外进行实例化时,若调用函数的方法不当则会产生时间和空间的浪费. 以下,将用几个小栗子来说明函数的调用优化的常见办法 类: class Test { public: Test(int d = 0) : _data(d) { cout << "Create Test Object:"<<this << endl; } Test(const Test&x) :_d

Entity Framework 6 Recipes 2nd Edition(11-4)译 -&gt; 在”模型定义”函数里调用另一个”模型定义”函数

11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11-4所示: Figure 11-4. A model representing the associate types in a company together with the reporting association 在我们的虚拟的公司里, , team members被一个team lea

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

关于编译型语言函数的调用(三)

接上文:http://blog.csdn.net/prsniper/article/details/40653235 类delete就不说了,有兴趣的朋友自己跟踪看看吧,提示一下:析构函数也有参数和返回值. 下面我们看下裸函数,裸函数从执行效率上是可以与汇编语言媲美的,然而它不太好逆过来说,我们就顺着说吧 前面说得构造函数的临时堆栈,恢复寄存器等等,有人给了个名称叫prolog和epilog 而裸函数并没有自动编译这些部分,其实说白了,裸函数相当于汇编语言中的一个标签,其调用受前面几种约定约束

C++之类的成员函数的调用 vs. 普通函数的调用

首先请看下面的语句: Point3d obj; Point3d *ptr = &obj; 当使用上述指针或者对象调用成员函数Func()时,会有: obj.Func(); ptr->Func(); 上述调用的背后到底完成了一些什么呢? 假设Func函数的定义如下: Point3d Point3d::Func() const { Float a = getA(); Point3d ret; ret._x = _x/a; ret._y = _y/a; ret._z = _z/a; return

C++中拷贝构造函数和赋值函数被调用的时机

一.拷贝构造函数被调用的时机: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值. 2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数. 3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数. 二.赋值函数被调用的时机: 当用一个对象赋值给另一个对象时 注意一.二中初始化和赋值的区别 C++中拷贝构造函数和赋值函数被调用的时机,布布扣,bubuko.com

递归 函数自己调用自己

1 #!/usr/bin/env python 2 # 递归 3 def f4(defth,a1, a2) : 4 5 if defth == 10 : 6 return a1 7 print(a1) 8 9 a3 = a1 + a2 10 r = f4(defth + 1,a2, a3) 11 12 13 s = f4(0,0 ,1) 14 print(s) 函数自己调用自己