- Unix/Linux 初学者指南
- Unix/Linux - 首页
- Unix/Linux - 什么是 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 - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- 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
这里**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