深入浅出Linux-Shell编程[五】
三、Shell 编程之函数
Shell 函数的本质是一段可以重复使用的脚本代码, 这段代码被提前编写好了, 放在了指定的位置, 使用时直接调 取即可
1、定义函数
可以带function fun() 定义, 也可以直接fun() 定义,不带任何参数。
| # 方法一 function name { commands [return value] } # 方法二 name() { commands [return value] } |
function 是 Shell 中的关键字, 专门用来定义函数;
name 是函数名;
commands 是函数要执行的代码, 也就是一组语句;
return value 表示函数的返回值, 其中 return 是 Shell 关键字, 专门用在函数中返回一个值; 这一部分可以 写也可以不写。
由 { } 包围的部分称为函数体, 调用一个函数, 实际上就是执行函数体中的代码。
函数的优势
方便n次使用, 减少代码量, 使之方便, 整洁。
当需要修改里面的重复代码时, 只需要修改一次函数即可实现需求;
将函数写进文件, 需要时直接通过文件调用
2、调用函数
1、执行不带参数的函数
直接输入函数名即可, 不需要带括号,
执行函数时, 函数名前的关键字function和函数名后面的()均不需要带
函数的定义必须要在执行的程序前定义或加载
2、执行带参数的函数
| functionName arg1 arg2 |
| can't use 'macro parameter character #' in math mode |
?/$@)均可以做为函数的参数行传递
$0比较特殊, 仍然是父脚本的名称
此时父脚本的参数会临时被函数的参数所掩盖或隐藏
函数的参数变量是在函数体内里面进行定义
3、 函数的执行总结
Shell各种程序的执行顺序为: 系统别名->函数->系统命令->可执行文件等
函数执行时, 会和调用它的脚本共享变量, 也可以为函数设定局部变量及特殊位置参数 在Shell函数里面, return和exit功能类似, 区别是return是退出函数, exit则是退出脚本 return语句会返回一个值给调用函数的程序, exit则会返回一个值给执行当前脚本的Shell 如果将函数单独存放为一个文件, 在加载时需要使用source或 . 进行加载
在函数内部一般使用local定义局部变量, 仅在函数体内有效
4、调用函数
| [root@qfedu.com ~]# cat testfunction.sh #!/bin/bash # first function function HelloWorld() { echo "Hello world" } # second function Welcome() { echo "Welcome to qfedu" } # third function function HelloShell { echo "Hello Shell" } # file functions HelloWorld # 调用函数 Welcome HelloShell [root@qfedu.com ~]# bash testfunction.sh Hello world Welcome to qfedu Hello Shell |
5、从文件中调用函数
3、函数参数传递
| [root@qfedu.com ~]# cat functionwithargs.sh #!/bin/bash function Add () { # 定义函数 ((sum=$1+$2)) echo "$1 + $2 sum is" ${sum} } Add $1 $2 # 调用函数并传递参数 [root@qfedu.com ~]# bash functionwithargs.sh 100 150 100 + 150 sum is 250 [root@qfedu.com ~]# bash functionwithargs.sh 509 150 509 + 150 sum is 659 |
4、return 返回函数结果
在该示例中, 主要通过 $? 获取返回值, 但返回值的范围只能是 0~255
5、echo 返回函数结果
| [root@qfedu.com ~]# cat functionwithecho.sh #!/bin/bash function TestReturn() { if [ ‐d $1 ] then echo "122" else echo "222" fi } result=$(TestReturn $1) # 获取函数返回值 if [ ${result} == "122" ] then echo "$1 exist ,return value is:" ${result} else echo "$1 not exist ,return value is:" ${result} fi [root@qfedu.com ~]# bash functionwithecho.sh /etc/sysconfig /etc/sysconfig exist ,return value is: 122 [root@qfedu.com ~]# bash functionwithecho.sh /etc/sysconfiggg /etc/sysconfiggg not exist ,return value is: 222 |
在该示例中, 主要使用 $() 获取返回值, 在该方法中, 没有范围限制, 是一种比较安全的返回方式。
6、全局变量和局部变量
全局变量在shell 脚本中任何地方都能使用; 局部变量在函数内部使用, 声明前加一个 local 就好
| [root@qfedu.com ~]# cat test3.sh function fun() { a=$[ $b + 5 ] c=$[ $a * 2 ] } a=4 b=6 fun if [ $a ‐gt $b ] then echo "$a is larger than $b" else echo "$a is smaller than $b" fi function fun() { local a=$[ $b + 5 ] c=$[ $a * 2 ] } a=4 b=6 fun if [ $a ‐gt $b ] then echo "$a is larger than $b" else echo "$a is smaller than $b" fi [root@qfedu.com ~]# bash test3.sh 11 is larger than 6 4 is smaller than 6 |
7、数组变量和函数
$@ 变量会单独处理每个参数
8、递归函数
- 点赞
- 收藏
- 关注作者
评论(0)