敞开成长之旅!这是我参与「日新计划 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文件中变量是大局环境.假如你想让变量限定在函数内部有效,需求运用
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之批量操作(二)
学习文章
shell 函数