Linux shell函数简介和使用方法

2023-08-25 16:24:13 来源:大川搬砖

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. 使用方法

因为脚本是从上到下顺序执行,所以,函数 必须****先定义后使用;调用函数时只需函数名即可,不需要小括号。
#!/bin/shtest_funfunction 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/shfunction 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/shfunction 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/shfunction 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"

6. 总结

嗯,shell 函数挺好用的!

标签:

上一篇:Linux如何证明线程共享进程的地址空间
下一篇:最后一页