0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

剖析Linux shell 函数实现

jf_78858299 来源:大川搬砖 作者:sdc123 2023-05-12 10:27 次阅读

1. 概述

作为一个嵌入式 Linux 工程师,肯定需要编写 shell 脚本进行一些自动化工作。刚好,我最近就有类似需求——一键交叉编译 DDS。本着“编写漂亮代码的原则”,我用到了 shell 函数

2. shell 函数简介

基本语法:

[function] function_name [()]
{
    do something
    [return int;]
}

[function] :虽然这个关键字可以省略不写,我还是建议写上,方便阅读;

function_name :函数名称;

do something :函数体,实现函数的具体功能;

[return int] :函数返回值,return 是关键字,int 为具体数值(0,1,2,…)。这个关键字也可以省略不写,这样函数将以最后一条命令运行的结果作为返回值。

:带方括号的关键字可以省略。

3. 使用方法

  1. 因为脚本是从上到下顺序执行,所以,函数 必须****先定义后使用
  2. 调用函数时只需函数名即可,不需要小括号。
#!/bin/sh

test_fun

function test_fun()
{
    echo "shell function test!"
}

test_fun

执行结果:

图片

4. 函数参数

定义函数后,在调用函数时可以向函数传入参数。和编程语言不同的是,shell 中定义函数时 无需声明参数 ,即带参数的函数定义还是原始的格式:

[function] function_name [()]
{
    do something
    [return int;]
}

向函数传入参数时只需在调用的位置直接输入参数即可,中间用空格隔开

function_name arg1 arg2 arg3 ...

4.1 参数访问

在函数内部访问参数时使用 的形式,n 为 1,2,3,4 …

#!/bin/sh

function test_fun()
{
    echo "arg1:${1}"
    echo "arg2:${2}"
    echo "arg3:${3}"
    echo "arg4:${4}"
    echo "arg num:$#"
    echo "\\${0}:${0}"
}

#调用函数
test_fun "apple" "pear" "banana" "orange"

图片

${0} :代表的是脚本的名称,和 C 语言 main 函数中的 argv[0] 意义相同。

$# :存储的是参数的个数。

***** 和 @ 都表示传递给函数的所有参数的集合。没有被双引号包围时,这两个的值相同。如果被双引号包围,那么意义就不同了:

"$*" 表示将所有的参数合并到一起, 成为一个参数

"$@" 表示所有的参数仍然是分离的。

通过 for 循环就能看出区别:

#!/bin/sh


function test_fun()
{
    echo "item in \\$*"

    for var in "$*"
    do
        echo "$var"
    done

    echo "item in \\$@"
    for var in "$@"
    do
        echo "$var"
    done
}

图片

5. shift

你可能会遇到这样的场景——在函数中,你只想 使用后面的几个参数,忽略前面的参数

这个时候就可以使用 shift 关键字了。

shift n 将全部参数 向左移动 n 个位置 ,后面的参数移动到前面参数的位置,前面的参数被丢弃。比如 shift 2 指令的最终结果是把原来的 **{3} 移动到 {1} 的位置,{4}移动到 **{2} 的位置 …

#!/bin/sh

function test_fun()
{

    echo "\\${1}:${1}"
    echo "\\${2}:${2}"
    echo "\\${3}:${3}"
    echo "\\${4}:${4}"

    shift 1

    echo "after shift 1:"

    echo "\\${1}:${1}"
    echo "\\${2}:${2}"
    echo "\\${3}:${3}"
}

test_fun "apple" "pear" "banana" "orange"

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19118

    浏览量

    305043
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209436
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62593
  • Shell
    +关注

    关注

    1

    文章

    365

    浏览量

    23368
收藏 人收藏

    评论

    相关推荐

    shell是什么?shell实现原理分析基于MM32 MCU的shell脚本源码

    在前两节中,我们讲解了如何在MM32 MCU上使用shell来辅助开发,分别介绍的是通过串口方式和J-Link RTT方式的shell,本次课程我们分析源码来讲解shell实现原理。
    发表于 12-02 15:58 2502次阅读

    Linux Shell脚本入门到实战详解

    Linux Shell脚本入门到实战详解
    发表于 02-17 15:03 643次阅读

    Linux shell脚本分享

    今天浩道跟大家分享几个Linux运维中常用到的shell脚本!
    发表于 07-18 09:53 557次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b>脚本分享

    Linux shell函数简介和使用方法

    作为一个嵌入式 Linux 工程师,肯定需要编写 shell 脚本进行一些自动化工作。刚好,我最近就有类似需求——一键交叉编译 DDS。本着“编写漂亮代码的原则”,我用到了 shell 函数
    发表于 08-25 16:21 1170次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>shell</b><b class='flag-5'>函数</b>简介和使用方法

    Linux Shell系列教程之(十五) Shell函数简介

    知识先为大家介绍到这里,Shell中的函数非常强大,在此不再展开讲,希望大家能够自己多多练习,熟练掌握。linux学习交流群:690327559
    发表于 09-07 16:46

    linux shell命令/unix shell命令教程

    linux shell命令/unix shell命令教程:为了防止未授权用户访问你的文件,可以在文件和目录上设置权限位。还可以设定文件在创建时所具有的缺省权限:这些只是整个系统安全问题中
    发表于 12-06 13:08 61次下载
    <b class='flag-5'>linux</b> <b class='flag-5'>shell</b>命令/unix <b class='flag-5'>shell</b>命令教程

    Linux常见调用shell脚本的三种方法

    编写Linux下的应用程序时有时需要调用Linux的相关shell脚本,在这些脚本中通过调用Linux的相关函数
    的头像 发表于 06-28 14:28 8428次阅读

    米尔科技Linux Shell编程介绍

    Shell是用户与内核进行交互操作的一种接口,是Linux最重要的软件之一。
    的头像 发表于 11-25 08:58 1644次阅读
    米尔科技<b class='flag-5'>Linux</b> <b class='flag-5'>Shell</b>编程介绍

    Linux开发_Shell脚本编程语言

    介绍LinuxShell编程,介绍shell里语句、变量、函数、运算符的使用。
    的头像 发表于 09-17 15:39 1190次阅读

    Linux命令行与shell脚本编写

    Linux命令行与shell脚本编写
    发表于 01-11 16:50 4次下载

    Linux基础知识中的Shell

    Shell便是Linux命令行环境CLI,直观意思是“外壳”,这一点与Linux内核对应。
    的头像 发表于 02-15 10:54 831次阅读

    shell命令和linux命令一样吗

    结合在一起,形成一个相当于面向过程的程序,即shell script,从而实现一些复杂的功能。 而Linux命令则是用来对Linux系统进行管理的命令。这些命令通常是由系统管理员或用户
    的头像 发表于 11-08 10:51 2875次阅读

    linux命令和shell编程有什么联系

    的命令,并提供了许多功能和特性,如变量、控制结构、函数等,这些功能和特性使得Shell编程成为可能。 其次,Linux命令是Shell编程的重要组成部分。通过使用
    的头像 发表于 11-08 10:53 929次阅读

    linux命令行与shell编程实战

    Linux命令行与Shell编程实战主要涉及以下内容: Linux命令行基础:学习Linux命令行的基本操作,如文件管理、进程管理、网络配置等。熟悉使用命令行能够提高工作效率,提升自己
    的头像 发表于 11-08 10:57 767次阅读

    Linux从零到精通:最简单的Shell脚本入门教程

    通过简单的命令和脚本,实现对系统的灵活控制和自动化管理。 shell脚本前言 shell脚本入门 shell变量基础 shell变量子串
    的头像 发表于 12-05 09:56 433次阅读
    <b class='flag-5'>Linux</b>从零到精通:最简单的<b class='flag-5'>Shell</b>脚本入门教程