bash函数

来源:互联网 发布:材料统计软件 编辑:程序博客网 时间:2024/06/05 04:04

在编程语言中,函数时一个很好使用调用。函数定义在一个文件中,我们可以不同的脚本中调用函数,这样节省了空间,而且工作效率也提升。
一、函数
1、概念

函数function是由若干个shell命令组成的语句块,实现代码重用和模块化编程。

2、文件

写函数文件时,与shell程序形式上相似,不同的是它不是一个单独的进程,不能单独运行,是shell的一部分。

3、函数和shell的区别

(1)shell程序在子shell中运行;(2)shell函数在当前的shell进程中运行,并且在当前shell中,函数可以对shell中变量进行修改。

4、函数格式

(1)function f_name(){        函数体    }(2)f_name() {        函数体    }(3)function f_name {        函数体    }

注意:①f_name(){函数体}和②function f_name{函数体}两者是有区别的

在命令行定义函数时,如果定义别名和函数名相同时,②可以定义成功,而①会报错。命令行,别名比函数的优先级高。

示例:
这里写图片描述
二、函数的定义和使用
1交互式定义函数
示例:
这里写图片描述

定义该函数后,该函数一直保留至用户从系统退出,或执行unset F_name命令。

2函数放在脚本文件中作为它的一部分

#!/bin/bash# func1 hello(){echo "Hello there today's date is `date +%F`"}echo "now going to the function hello" helloecho "back from the function"

注意:函数必须在使用前定义。

3在只包含函数的单独文件中

    可以将函数写入到文件中,将此文件载入shell脚本中即可。    一旦函数文件载入shell,可以在命令行或脚本中调用函数。可以使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数。

注意:如果要更改函数,首先用unset命令从shell中删除函数。更改完成后再载入到文件中。

创建好函数文件如何载入?    . filename或source filename 先载入函数文件,再使用f_name调用函数。

注意:<点><空格><文件名>这里的文件名必须要是正确路径。

函数的生命周期:被调用时创建,返回时终止。

注意:函数只有被调用时才能被执行。函数名出现的地方会被替换为函数代码。
三、函数返回值
函数有两种返回值:
1、函数执行结果返回值

(1)使用echo等命令进行输出;(2)函数体中调用命令的输出结果;

2、函数的退出状态码

(1)默认取决于函数中执行的最后一条命令的退出状态码;(2)自定义退出状态码        return 从函数中返回,用最后执行命令决定返回值;        return 0 无错误返回;return 1-255有错误返回return与exit的区别:    return不退出脚本,exit退出脚本。

3、环境函数

功能:使其子进程也可用声明:export -f function_name或declare -xf function_name查看函数:export -f或declare -f 

四、函数参数
函数可以接受参数

    传递参数给函数:调用函数时,在函数后面以空白分隔给定参数列表即可;例如:testfunc arg1 arg2    在函数体中,可使用$1,$2,$3...调用这些参数,还可以使用$@,$#,$*。

五、函数变量

环境变量:对当前shell及其子shell有效;本地变量:只在当前shell进程有效,为执行脚本会启动专用的shell进程;因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数局部变量。局部变量:函数的生命周期。

注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量。

定义函数中局部变量的方法:    local NAME=value    declare -i相当于定义本地变量local       declare -ig 相当于环境变量    函数递归    函数直接或间接调用自身。函数调用有极限。

六、fork炸弹

    fork炸弹是一个恶意程序,它的工作原理是fork进程无限循环。实质是一个简单的递归程序。由于程序是递归,如果没有任何限制,导致这个简单程序迅速消耗系统里面的资源。    格式::(){:|:&};:        bomb(){bomb|bomb&};bomb    脚本实现:        cat Bomb.sh        #!/bin/bash        #        ./$*|./$0&
原创粉丝点击