bash函数

在编程语言中,函数时一个很好使用调用。函数定义在一个文件中,我们可以不同的脚本中调用函数,这样节省了空间,而且工作效率也提升。
一、函数
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" hello
echo "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&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值