codecamp

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 code

这里的代码可以是任何你选择这里,但很明显,你应该选择你的脚本作为一个整体的背景下是有意义的或有用的东西。

例子:

下面的函数返回一个值1:

#!/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 函数的定义,可以使用unset命令 .f 选项。这是相同的命令来删除一个变量的定义Shell。

$unset .f function_name

 




Shell 输入/输出重定向
Shell 联机帮助
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }