开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
经过前几篇文章的学习,慢慢的不可避免的,就要接触到函数.果不其然,在shell之批量操作(二)这篇文章中,我也是第一次使用了函数.更有条理的来完成,我们想要的结果.既然都用到了,那这里就好好的学习一下吧.
您能在这里看到啥
- 啥是函数
- 函数传参即返回值
- 函数变量作用范围
- 使用其他文件函数
啥是函数
-
自己的理解
函数其实就是代码重复利用和最小功能集的代码块.区别在于,各个语言定义函数的格式有所不同.这一点我不太确定.所有语言的函数是不是都需要调用才可以执行,如果您知道,可以在评论里告知一下.
-
shell中的函数
在shell之批量操作(二)这里我们看一下是怎么创建函数
# 批量移动txt文件 mvtxt() { target="*.txt" find "$project_path" -name "$target" -print0 | while IFS= read -r -d '' file; do echomsg "$file" mv "$file" "$project_demo_path/a" done } mvtxt从上面的代码里,我们可以看到最简单的函数的雏形.也可以发现,函数里,其实是把本来在函数外面的shell命令.归纳到了函数里.从而我们可以得到结论.
函数是由shell命令组成的代码块.但是它是可以独立运行的,因为它不是一个单独的进程,必须依赖在shell程序里.得到调用才会执行函数里的代码块.
-
函数格式
-
默认函数格式
[function] funname [()] { 函数体... [return 参数]; } -
格式说明:
- 用
[]包裹的内容,代表是可选的. - 切记如果在funname后面你不使用
().就要一定使用function,如下所示function test {}
- 用
-
函数事例
- 省事语法
test(){ echo "test" } test(){ return "test" } - 规范语法
function test() { echo "test" } function test { return "test" }
- 省事语法
-
函数传惨即返回值
经过上面的整理,我们也算是初步了解,怎么定义函数.下面我们学习一下,怎么调用函数,以及怎么获取函数返回值
-
函数调用
在调用函数的时候,分为两种情况
-
无参数
test -
有参数
如果需要多个参数,每个参数之间用空格分隔.如下所示:
test p1 p2 p3 p4
如上所示,我们可以得到结论,调用函数只需要写函数名 + 参数 即可.
-
-
函数参数
在上面的举例中.我们知道函数是可以有参数的,那我们在函数里,怎么获取参数呢
-
获取所有参数
可以使用
$@来获取函数的所有参数.如下所示:test() { for var in "$@";do echo "$var" done } test "1" "2" "3" "4" 输出结果: 1 2 3 4 -
获取单个参数
可以使用
$n来获取第n个参数.如下所示:test() { echo "$2" } test "1" "2" "3" "4" 输出结果: 2 -
获取参数个数
可以使用
$#来获取参数的个数.如下所示:test() { echo "$#" } test "1" "2" "3" "4" 输出结果: 4
-
-
函数值
返回字符串# 如果只是返回字符串,需要如下使用 get_test() { echo "test" } # 获取函数返回 RES=$(get_test) echo "$RES" # 输出如下所示: test返回数值function test() { return "$1" } # 获取函数返回 test 1 a=$? echo "$a" # 输出结果 1返回变量# 由于shell默认函数只可以返回`整数值`和`固定字符串` # 如果想返回变量,则需要我们定义一个变量来接收函数返回值. test() { msg="test" # 我们定义的变量.承载函数返回值 result=$msg } test # 取值的时候,直接获取我们定义的变量即可 echo "$result"
函数变量作用范围
shell文件中变量是全局环境.如果你想让变量限定在函数内部有效,需要使用local命令
test() {
local a
a=1
echo "$a"
}
a=10
test
echo "$a"
# 输出结果
10
使用其他文件函数
在我们的功能不断完善的过程中,不能一直把所有的功能都写在一个sh文件中,这样就需要我们根据功能来创建不同sh文件.这就出现了一个新的的问题,我们应该怎么使用其他sh文件中参数或者定义的函数呢.那就引出了source指令.下面简单说一下source指令
- source命令
source命令称为点命令,是bash的内部命令- 功能: 使shell读入指定sh文件,并依次执行文件中的所有语句
- 用法
- source ts.sh
- . ts.sh
- source使用
-
引入文件只用一个函数或者文件没有函数,
当引入的文件没有函数或只有一个函数,就可以直接使用
source即可.代码如下所示 创建ts.sh文件ts.sh echo "ts" test() { echo "test" }创建主体文件
tes.sh source ./ts.sh echo "tes" test当我们执行tes.sh文件的时候.ts.sh文件就会也被执行.
输出如下 ts tes test -
引入文件有一个或多个函数
当引入的文件有多个函数的时候,就需要我们使用
chmod a+x指令.来赋予当前脚本可以执行文件中的所有函数.代码如下所示创建
ts.sh测试文件ts.sh test1() {} test2() {} test3(){}创建
tes.sh主体文件source ./ts.sh chmod a+x ts.sh # 这样我们就可以调用所有函数了 test1 test2 test3
-
系列文章
- shell 通用命令之find
- shell 通用命令之ls
- shell 通用命令之文件权限
- shell 通用命令之流程控制(一)
- shell 通用命令之流程控制(二)
- shell 通用命令之字符串操作
- shell之批量修改内容
- shell之批量操作(一)
- shell之批量操作(二)