第五章 shell函数的定义、执行、传参和递归函数

第五章 shell函数的定义、执行、传参和递归函数

Bash(Bourne Again shell)也支持函数,在编写大型复杂脚本的时候,可以用函数把代码编写成一个一个功能相对独立的代码块,使代码模块块、结构清晰、有效的减少程序的代码量。但是bash shell是一种解释性语言,执行效率没有编译性语言高。

shell函数的定义

格式一:(
function name() {
    command sequence (命令序列)
}

格式二:
name() {
    command sequence (命令序列)
}

函数执行

[[email protected] ~]# function name() {
> echo "123"
> }

执行
[[email protected] ~]# name    #直接调用函数名即可
123

传递参数

[[email protected] ~]# vi chuandi.sh
#!/bin/bash
aa="111"    #定义全局变量
bb="222"    #定义全局变量
function name() {           #定义函数名
        local cc="ccc"      #定义局部变量
        local dd="ddd"      #定义局部变量
        echo $aa, $bb       #打印全局变量
        echo $cc            #打印局部变量
        return 0            #shell函数返回值是正行,并且在0-257之间。
}
echo $dd    #运行局部变量,因为这里是在函数外运行,不会生效。

name    #运行函数name

注意:
$aa是第一个参数$1, $bb是第二个参数$2, 依次类推$n就是第n个参数$n
return 0 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果作为返回值
执行:
[[email protected] ~]# /bin/bash chuandi.sh 

111, 222
ccc

递归函数

bash也支持递归函数(能够调用自身的函数)

[[email protected] ~]# cat digui.sh
#!/bin/bash
function name() {
        echo $1
        name hello
        sleep 1
}
name

执行脚本会不停的打印hello,按ctrl+c 手动结束

递归经典:fork ×××

可能很多人都曾经听说过fork×××,它实际上只是一个非常简单的递归程序,程序所做的事情只有一样:这个递归函数能够调用自身,不断的生成新的进程,这会导致这个简单的程序迅速耗尽系统里面的所有资源,造成拒绝服务攻击。

.()
{
.|.&
}
;
.
  • 第1行说明下面要定义一个函数,函数名为小数点,没有可选参数。
  • 第2行表示函数体开始。
  • 第3行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。
  • 第4行表示函数体结束
  • 第5行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。
  • 第6行表示调用本函数

原文地址:http://blog.51cto.com/506554897/2114423

时间: 2024-12-10 17:01:46

第五章 shell函数的定义、执行、传参和递归函数的相关文章

第五章 Shell函数与数组

5.1 函数 格式: func() {     command } 示例1: #!/bin/bash func() {     echo "This is a function." } func # bash test.sh This is a function. Shell函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. 示例2:函数返回值 #!/bin/bash func() {     VAR=$((1+1))     return $VAR     

深入理解PHP内核(六)函数的定义、传参及返回值

一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; } 1.词法分析 在Zend/zend_language_scanner.l中我们找到如下所示的代码: <ST_IN_SCRIPTING>"function" { return T_FUNCTION; } 它所表示的含义是function将会生成T_FUNCTION标记.在获取这个标记后,我们开始语法分析. 2.语法分析 在Zend/zend_

第五章 shell学习之文件的排序、合并和分割

sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如sort -m a1 a2,a1的记录被有序的插入a2 -n 根据数字的大小进行排序,一般放在域号后,如-k3n -o 将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分割符,如-t: -u 去除结果中的重复行 sort和awk联合 例: [[email protected] tmp]#

第十五章 shell正则表达式

第十五章 shell正则表达式 见图片 Shell正则表达式 正则表达式的分类 基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs) 扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs) Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs) 基本组成部分 正则表达式的基本组成部分. 正则表达式 描述 示例 Bas

javascript函数(声明,传参,返回值,递归)

javascript函数(声明,传参,返回值,递归) 1.函数的基本概念 函数:是由事件驱动的或者当他被调用时可执行的可重复使用的代码块. 空调是由遥控器控制或者当开关打开时,可运行的家用电器(工具) 特点: 封装代码----使代码更简洁 重复使用---在重复功能的时候直接调用就好 执行时机---随时可以在我们想要执行的时候执行 2.函数的创建和执行 1. 函数的创建 1.声明式 函数声明的关键字 : ==function== function 关键字 和 var 关键字的行为几乎一致,都会在内

(转)javascript匿名函数的写法、传参和递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的避免对全局变量的污染.常见的匿名函数有下面四种写

(转)Javascript匿名函数的写法、传参、递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的

Report Studio值提示通过prompt宏函数给sql查询传参

场景:当我们在DW中新建了一个表,但是在FM中没有创建模型,想针对这个表直接做一个报表,那么就需要在reportstudio中直接用sql来查询,为了追求查询速度,我们可以把页面用户选择的条件直接传给sql. 如下图:上面是省份对应key值为1-2-3-4-5,下面是商品类型对应key值为1-2,省份选择1,5类型选择1则出现想要的数据 实现步骤: 1:从工具箱拖一个sql,每个sql会绑定一个查询接收sql的查询结果,如下图 2:指定sql引用的数据源,数据源已经在CognosConnecti

第五章 Python 函数

第1章 为什么要使用函数 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大 第2章 函数是什么 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需要调用函数名即可. 特性: 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 函数的使用必须遵循:先定义,后调用 2.1 函数的分类 1. 内置函数:python解释器自带的函数,py