- Unix / Linux 初学者
- Unix / Linux - 主页
- Unix / Linux - 入门
- Unix / Linux - 文件管理
- Unix / Linux - 目录
- Unix / Linux - 文件权限
- Unix / Linux - 环境
- Unix / Linux - 基本实用程序
- Unix / Linux - 管道和过滤器
- Unix / Linux - 进程
- Unix / Linux - 通信
- Unix / Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix / Linux - Shell 脚本
- Unix / Linux - 什么是 Shell?
- Unix / Linux - 使用变量
- Unix / Linux - 特殊变量
- Unix / Linux - 使用数组
- Unix / Linux - 基本运算符
- Unix / Linux - 决策
- Unix / Linux - Shell 循环
- Unix / Linux - 循环控制
- Unix / Linux - Shell 替换
- Unix / Linux - 引用机制
- Unix / Linux - IO 重定向
- Unix / Linux - Shell 函数
- Unix / Linux - 联机帮助页
Unix / Linux - Shell 函数
在本章中,我们将详细讨论 shell 函数。函数使您能够将脚本的整体功能分解为更小的逻辑小节,然后可以在需要时调用这些小节来执行各自的任务。
使用函数执行重复性任务是创建代码重用的绝佳方法。这是现代面向对象编程原理的重要组成部分。
Shell 函数与其他编程语言中的子例程、过程和函数类似。
创建函数
要声明函数,只需使用以下语法 -
function_name () { list of commands }
函数的名称是function_name,您将使用它从脚本中的其他位置调用它。函数名称后面必须跟有括号,后面是大括号内的命令列表。
例子
以下示例显示了函数的使用 -
#!/bin/sh # Define your function here Hello () { echo "Hello World" } # Invoke your function Hello
执行后,您将收到以下输出 -
$./test.sh Hello World
将参数传递给函数
您可以定义一个在调用该函数时接受参数的函数。这些参数将由$1、$2等表示。
以下是一个示例,我们传递两个参数Zara和Ali,然后在函数中捕获并打印这些参数。
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello Zara Ali
执行后,您将收到以下结果 -
$./test.sh Hello World Zara Ali
从函数返回值
如果从函数内部执行exit命令,其效果不仅会终止该函数的执行,还会终止调用该函数的 shell 程序。
如果您只想终止函数的执行,则可以退出已定义的函数。
根据情况,您可以使用return命令从函数返回任何值,其语法如下 -
return code
这里的代码可以是您在此处选择的任何内容,但显然您应该选择在整个脚本上下文中有意义或有用的内容。
例子
以下函数返回值 10 -
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$? echo "Return value is $ret"
执行后,您将收到以下结果 -
$./test.sh Hello World Zara Ali Return value is 10
嵌套函数
函数更有趣的特性之一是它们可以调用自身,也可以调用其他函数。调用自身的函数称为递归函数。
以下示例演示了两个函数的嵌套 -
#!/bin/sh # Calling one function from another number_one () { echo "This is the first function speaking..." number_two } number_two () { echo "This is now the second function speaking..." } # Calling function one. number_one
执行后,您将收到以下结果 -
This is the first function speaking... This is now the second function speaking...
从提示符调用函数
您可以将常用函数的定义放入.profile中。只要您登录,这些定义就可用,并且您可以在命令提示符下使用它们。
或者,您可以将定义分组到一个文件中,例如test.sh,然后通过键入 - 在当前 shell 中执行该文件:
$. test.sh
这会导致test.sh中定义的函数被读取并定义到当前 shell,如下所示 -
$ number_one This is the first function speaking... This is now the second function speaking... $
要从 shell 中删除函数的定义,请使用带.f选项的 unset 命令。该命令还用于删除 shell 中变量的定义。
$ unset -f function_name