Shell函数

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

#格式1
function name(){
    command sequence(命令序列);
}

#格式2
name() {
    command sequence(命令序列);
}

#执行的话直接
name;


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


#!/bin/bash
sum(){
 echo "---函数开始执行---"
 read -p "input first:" a
 read -p "input second:" b
 echo "$a + $b = $(($a+$b))"
 echo "---函数结束执行---"
 return $((a+b))
 echo "这行不会执行"
}
echo "原先状态码:$?"
sum #这是函数调用
echo "执行函数后的状态码:$?"
echo "再次查看状态码:$?"

输出结果

定义变量

#!/bin/bash
a="this is a"   #全局变量
b="this is b"   #同上
name(){
        local c="this is c" #局部变量
        local d="this is d" #同上
        echo $a,$b          #输出参数$a,$b
        echo $c,$d          #输出局部变量
        return 0            #自定义返回,如果不加,将最后一条命令运行结果作为返>回值
}
echo "d:$d"
echo "a:$a"
name

递归函数

#!/bin/bash -x
function name() {
        echo $1
        name hello #自身调用,会不断输出hello
        sleep 1
}

name

-------------------------------------------------------------------
递归:(fork 炸弹):程序所作的事情只有一样,这个函数能够调用自身,不算生成新的进程,这会导致这个简单的程序迅速耗尽系统里面所有资源,造成拒绝服务攻击。(虚拟机试试就行了)
#!/bin/bash
.()     #定义一个函数,函数名为".",没有可选参数
{       #函数体开始
.|.&    #他递归调用本函数,利用管道调用一个新进程,做的事情也是递归调用本函>数,并且放到后台执行
}       #函数体结束
;       #不会执行任何操作,在命令行中分割两个命令用,表明这段程序包含两部分>(首先定义了一个函数,然后调用这个函数)
.       #上面是调用本函数


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值