Shell编程基础(第6篇:函数)

前言

哪个语言标准,没有函数呢?我还真没找到,函数反复调用,减少重复代码,我们一起学习shell编程中的函数,包括创建函数、删除函数、函数中定义变量、函数的返回值(退出状态码)、函数中的参数处理、函数调用……

创建函数

两个标准的创建函数语法,习惯哪个用哪个!

1、直接定义

函数名(){

   ……函数体……

}

print_name(){

    echo "wang yuan wai"

}

2、function关键字

多加了一个function关键字,在没有类的shell编程中,以后加入面向对象看来也是有可能的……

function print_name(){

    echo "wang yuan wai"

}

函数调用

直接写函数名即为函数调用

注意:函数名后面没有括号,那参数怎么传递呢?继续往下看!

function print_name(){

    echo "wang yuan wai"

}

print_name

参数处理

1、参数接收

特殊变量1表示第一个参数、特殊变量2表示第二个参数,第几个参数就用数字x代替

function print_name(){
    name=$1
    age=$2
    echo ${name} ${age}
}

print_name "wang yuan wai" "34"

2、参数传递

空格字符隔开,即为向函数传递参数

print_name "wang yuan wai" "34"

3、 所有参数

$*或者$@(作者喜欢用*与@代表所有参数)

4、参数个数

#在函数中表示传入函数中的参数个数

function print_name(){
    name=$1
    echo $#
}

全局变量与局部变量

1、全局变量(坑)

函数中定义的变量,默认为全局变量,在整个shell脚本程序中均可访问

function print_name(){
    name="wang yuan wai"
    echo ${name}
}

2、局部变量

局部变量,使用local定义

function print_name(){
    local name="wang yuan wai"
    echo ${name}
}

局部变量作用域

必须纠结作用域,整个函数内都能访问局部变量

function print_name(){
    if true;then
        local name="wang yuan wai"
    fi
    echo ${name}
}

函数返回值(退出状态码)

1、return不填写数字时,默认返回最后一个命令的退出状态码

function print_name(){
    local name="wang yuan wai"
    return
}

 2、指定退出状态码并返回

function print_name(){
    name="wang yuan wai"
    return 0
}

3、未填写return,默认为最后一条命令的退出状态码

function print_name(){
    name="wang yuan wai"
    echo ${name}
}

4、记住:函数函数的return只能返回退出状态码,那么如果先返回一个值怎么办?请继续往后看

命令替换模拟函数返回值

#!/bin/bash

function print_name(){
    echo "wang yuan wai"
}

my_name=$(print_name)

echo $my_name

中止函数执行

同样使用return,将导致后续程序不会再继续执行

function print_name(){
    name="wang yuan wai"
    if true;then
        return
    fi
    echo ${name}
}

同名冲突

别名、函数、外部脚本程序名称相同时,bash解释器的处理方案

1、别名优先级最高

2、函数优先级次高 

3、外部脚本程序最低

总结

1、shell编程中的参数处理规范比较个性,这个值得注意一下

2、函数中的返回值只能返回退出状态码

3、函数中直接定义的变量为全局变量,这个太坑……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值