函数是一组命令,这些命令被赋予一个名称,本中该名称的本中作用类似于该组命令的句柄。 要执行函数中定义的本中这组命令,只需使用您提供的本中名称调用该函数即可。 在某些情况下,本中您需要执行一个代码块,本中该代码块在shell脚本的本中不同位置执行多次特定过程。 Shell函数类似于其他编程语言中的本中子例程,过程和函数。本中 •它有助于我们重用代码。 •提高程序的本中可读性。 •在程序内有效使用变量。本中 •允许我们逐个测试程序。本中 •将程序显示为一系列子步骤。本中 在第一种语法中,您必须使用关键字函数,后跟函数名称以及打开和关闭括号和花括号,以将函数的内容与主例程分开。 在第二种语法中,由函数名称,开括号和闭括号以及花括号组成。 我们有一些shell脚本示例: 在这个例子中,我们将编写一个非常小的函数,用“----”打印一行 让我们看看它是如何工作的: 第1行:声明函数 print_line 。 第2行和第4行: { } 用于分隔函数体 的花括号 。 第3行:函数体中唯一的语句:使用echo命令打印一行“---”字符。 第5行:调用该 print_line 函数。 第6行:打印提供的参数 $1 。 第7行: print_line 再次 调用该 函数。 注意: $1 在上面的示例中, “ ”将采用以下值,亿华云您将在执行脚本时给出参数。 1) 打印“欢迎使用自动化实验室”(它将使用双引号打印整个声明) 2) 打印“欢迎使用”(它将仅显示“收件人”声明) 3) 打印“欢迎”(它将打印只欢迎) ./function.sh “To Automation Laboratories” ./function.sh To Automation Laboratories ./function.sh (without any argument) 让我们理解以上内容: 在我们调用之后,我们添加了值“Hello”和“World” myfunction 。 这些值作为参数传递给myfunction并存储在局部变量中。 解释器将传递的值存储到预定义变量中,这些变量根据传递参数的顺序命名,1作为起始名称直到传递顺序。 请注意,“Hello”字存储在变量1中,值“World”存储在变量2中。 注意:上面的1和2是局部变量,因此,除了传递参数的函数之外,脚本的其他部分都无法访问它们。 在 echo $1 和 echo $2 我们的脚本的最后两行没有显示,因为解释不承认这两个变量,因为它们都是局部给myFunction。 让我们通过再举一个例子来更清楚地了解这一点: 我们将编写一个估计字符串长度的函数。 该字符串将作为参数提供给函数。 让我们看看它会是怎样的。 嗯...在此之前,为什么我们不在Linux中增强一些有用的命令? “ wc -l ”:计算行数 “ wc -w ”:计算单词数 “ wc -m ”:计算字符数 第2行:声明并初始化变量长度。 第3行:定义函数string_length。 第4行和第6行:功能代码块分隔符。 第5行:函数内唯一的代码行: length =`echo -n $ 1 | wc -m` 传递给函数$ 1的参数使用echo命令打印,该命令选项 –n 可防止echo在末尾插入换行符。 命令echo的输出通过 –n $1 管道传输到 命令 的输入流 wc –m (它对输入中的字符进行计数)。 上面复合语句的结果是echo -n $ 1 | wc -m被赋予(通过使用反引号)到可变长度。 第7行:从用户读取输入字符串,并将其分配给变量 STR 。 第8行:调用 string_length 函数并将变量传递 STR 给它。 调用该函数的结果是估计STR的长度并将计算的长度存储在可变长度中。 第9行:将结果打印给用户。 Bash函数可以使用关键字return将函数的局部变量的值传递给主例程。 然后将返回的值存储到默认变量$? 我们来举个例子: 我们将参数int1和int2传递给add函数。 接下来,该 add 函数通过该行处理它 sum=$(($1+$2)) 。 然后sum变量的值通过该行传递给主程序 return $sum 。 默认情况下,值 $sum 将存储到默认变量 $ ? 最后,行echo "The result is: " $? 显示结果。 注意:Shell脚本只能返回单个值。 递归函数意味着在函数定义中,并且在函数的代码内部,调用语句可以出现调用函数(被定义)本身。 这应该由测试条件控制,以确保功能将收敛。 如果没有指定条件,或者使用了错误的条件,该函数将永远调用自身。 现在使用一个因子示例来增强此递归函数: result=1 :此行将变量result初始化为1 factorial_function .:声明阶乘函数。 函数体Staring delimiter { if [$ 1 -gt1]; 然后检查提供给函数的参数是否大于1. 如果是,则执行以下两行: let “result *= $1” :这将结果的当前值乘以传递给函数的参数。 factorial $(($1-1)) :这以递归方式调用阶乘函数,并以$ 1-1作为参数传递给它。 函数体关闭分隔符} 声明函数后,这又是主脚本代码: factorial $1 主脚本调用阶乘函数并将传递给脚本$ 1的命令行参数传递给它。 不要混淆代表第一个命令行参数的$ 1和代表传递给函数的第一个参数的$ 1。 最后一行将结果打印给用户。 1.首先,将结果变量设置为1. 2.解释器遇到函数定义。 3.使用参数4调用该函数。控件将转移到按以下方式工作的函数: a)如果参数大于1(这是大小写),则检查参数(现在为4)。 如果是,则执行以下两行: i)完成通常的累加乘法运算:结果乘以参数$ 1,结果存储在变量结果中。 ii)阶乘函数被称为“递归地”并且作为参数传递3。 控制再次转移到阶乘函数,其参数现在为3。 b)如果参数“3”大于1(这是大小写),则检查参数“3”。 如果是,则执行上述两个步骤(i和ii)。 步骤ii再次调用阶乘函数,其中2为参数。 c)这一直持续到使用参数1调用阶乘函数。此时,if条件失败,并且函数终止。 4.控件返回主脚本,执行函数调用后的第一行(即将结果打印给用户的echo命令)。 我们已经讨论过Linux shell脚本中的函数。 函数是实现特定任务的代码块。 函数可以接受参数或根本不需要参数调用。 我们用例子说明了我们的谈话。 我希望你发现这篇文章很有用。 如果您发现任何不正确的内容,或者您想要分享有关上述主题的更多信息,请撰写评论。 Shell脚本中的本中功能是什么?
为什么Shell脚本中的本中函数?
Bash函数返回