设为首页 加入收藏

TOP

shell简明教程3函数(一)
2023-09-09 10:25:41 】 浏览:135
Tags:shell 简明教 函数

3 函数

在本章中,您将了解为什么以及何时需要使用函数。 你将学习如何创建函数以及如何使用函数。 我们将讨论变量及其作用域。 学习如何使用参数访问传递给函数的参数。 最后,您还将学习如何使用函数处理退出状态和返回代码。

计算机编程和应用程序开发中有一个概念叫做 DRY。 DRY 是 "不要重复"(Don't Repeat Yourself)的缩写。 通过函数,您只需编写一次代码块,即可多次使用。每次需要执行特定任务或功能时,只需调用包含该代码的函数,而无需重复几行代码。这有助于缩短脚本的长度,还能让您在一个地方对给定任务进行更改、测试、故障排除和记录。所有这些都使脚本更易于维护。

每当您需要在脚本中多次执行同一操作时,这就表明您可能应该为该操作编写函数。 函数只是可重复使用的代码块,它执行操作并返回退出状态或返回代码。 函数在调用前必须先定义。 调用函数时,可以向函数传递数据。 您可以在函数中以参数的形式访问这些数据。

3.1 创建函数

创建函数有两种方法。 第一种方法是明确使用关键字function,然后在关键字后面加上函数名称和括号。 然后使用开头的大括号。 当函数被调用时,后面的代码或命令将被执行。要结束函数,请使用结尾大括号。

function function-name() {
    # Code goes here.
}

声明函数的第二种方法与第一种完全相同,只是在声明中不使用关键字 unction。 其他一切保持不变。

function-name() {
    # Code goes here.
}

3.2 调用函数

要调用函数,只需在脚本中列出函数名称即可。 调用函数时,不要使用括号。 你可能在其他编程语言中见过这种语法和样式,但在shell脚本中不起作用。 只需将函数名称放在一行中,它就会执行该函数。
运行此脚本时,屏幕上会显示 "Hello!"。

#!/bin/bash
function hello() {
    echo "Hello!"
}
hello

执行:

$ ./functions-01.sh 
Hello!

函数可以调用其他函数:

#!/bin/bash

function hello() {
    echo "Hello!"
    now
}

function now() {
    echo "It's $(date +%r)"
}

hello

执行:

Hello!
It's 下午 08时42分21秒

函数必须在使用前声明,不要这样做:

#!/bin/bash

function hello() {
    echo "Hello!"
    now
}

# This will cause an error as the "now()" function is not yet defined.
hello

function now() {
    echo "It's $(date +%r)"
}

执行:

$ ./functions-03.sh 
Hello!
./functions-03.sh: line 5: now: command not found

脚本语言不是预编译的。 在某些语言中,你可以在任何地方定义函数,编译器会检查所有源代码,然后将它们拼凑在一起,最终执行程序。 在脚本中,命令和组件会在运行时从上到下读取。最好将所有函数放在脚本的顶部。 这样可以确保在使用前定义好所有函数。

3.3 位置参数

使用$1、2等参数访问这些传入参数的值。 唯一不同的是,$0仍然是脚本本身的名称。您不能使用 $0 访问函数的名称,但好消息是,无论如何您都不会真的想这样做。
要向函数发送数据,请在函数名称后输入数据。 在本例中,hello 函数的调用只有一个参数,即 Jason 。 这意味着 hello 函数中 $1 的内容是 "Jason"。 正如你所猜测的,这个脚本的输出就是 "Hello Jason"。

#!/bin/bash

function hello() {
    echo "Hello $1"
}

hello Jason

执行:

$ ./functions-04.sh 
Hello Jason

下面脚本将循环处理传递给hello函数的每个参数:

#!/bin/bash

function hello() {
    for NAME in $@
    do
        echo "Hello $NAME"
    done
}

hello Jason Dan Ryan

执行:

$ ./functions-05.sh
Hello Jason
Hello Dan
Hello Ryan

参考资料

3.4 变量作用域

默认情况下,所有变量都是全局变量。 这意味着变量及其值可以在脚本的任何地方访问,包括在任何函数中。在使用变量之前,必须先定义变量。

#!/bin/bash

my_function() {
    echo "$GLOBAL_VAR"
}

GLOBAL_VAR=1
# The value of GLOBAL_VAR is available to my_function
my_function

执行:

$ ./functions-06.sh
1

如果在函数中定义了全局变量,那么在函数被调用和执行之前,它在函数之外是不可用的。

#!/bin/bash

my_function() {
    echo "$GLOBAL_VAR"
}

# The value of GLOBAL_VAR is NOT available to my_function since GLOBAL_VAR was defined after my_function was called.
my_function
GLOBAL_VAR=1

执行:

 ./functions-07.sh

#!/bin/bash

my_function() {
    GLOBAL_VAR=1
}

# GLOBAL_VAR not available yet.
echo "GLOBAL_VAR value BEFORE my_function called: $GLOBAL_VAR"

my_function

# GLOBAL_VAR is NOW available
echo "GLOBAL_VAR value AFTER my_function called: $GLOBAL_VAR"

执行:

$ ./functions-08.sh
GLOBAL_VAR value BEFORE my
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇shell简明教程2退出状态和返回代码 下一篇键盘敲入 A 字母时,操作系统期间..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目