廣告
请使用 http://www.luhui.net 網址高速訪問本站,歡迎關注微信公衆賬号:guanfu8 平台長期發布海量社科數據, 本站QQ交流群:84142868 探讨人文理想,共謀和諧世界!
黄金广告位招租,投放热线15900718107,13386070835 详情查看=》   鲁之虺:“  上网就是搜索,生活就是分类,科技服务大众,信息引领生活,地方分类站长,开启您的事业之旅。生活分类信息整体提供商:http://huike.luhui.net”。
×

鲁虺繁体中文社区

 找回密碼
 立即註冊
廣告

 

查看: 94|回復: 0

[应用软件] Shell脚本中的函数

[複製鏈接]
發表於 2018-11-7 09:21:06 | 顯示全部樓層 |閱讀模式
廣告
搜索看看︰Shell脚本中的函数
廣告
Shell脚本中的功能是什么?

函数是一组命令,这些命令被赋予一个名称,该名称的作用类似于该组命令的句柄。要执行函数中定义的这组命令,只需使用您提供的名称调用该函数即可。
在某些情况下,您需要执行一个代码块,该代码块在shell脚本的不同位置执行多次特定过程。Shell函数类似于其他编程语言中的子例程,过程和函数。
为什么Shell脚本中的函数?

•它有助于我们重用代码。
•提高程序的可读性。
•在程序内有效使用变量。
•允许我们逐个测试程序。
•将程序显示为一系列子步骤。
  1. 要使用的语法:
複製代碼
  1. Syntax1:
複製代碼
  1. function function_name
複製代碼
  1. {
複製代碼
  1. ###命令集
複製代碼
  1. }
複製代碼
  1. Syntax2:
複製代碼
  1. 函数名()
複製代碼
  1. {
複製代碼
  1. ####命令集
複製代碼
  1. }
複製代碼
  1. Syntax1:1
複製代碼
  1. Syntax1:2
複製代碼
  1. Syntax1:3
複製代碼
  1. Syntax1:4
複製代碼
  1. Syntax1:5
複製代碼
  1. Syntax1:6
複製代碼
在第一种语法中,您必须使用关键字函数,后跟函数名称以及打开和关闭括号和花括号,以将函数的内容与主例程分开。
在第二种语法中,由函数名称,开括号和闭括号以及花括号组成。

我们有一些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)  
  1. Syntax1:7
複製代碼
  1. Syntax1:1
複製代碼
  1. Syntax1:9
複製代碼
  1. function function_name0
複製代碼
  1. function function_name1
複製代碼
  1. {
複製代碼
  1. function function_name3
複製代碼
  1. }
複製代碼
  1. function function_name5
複製代碼
  1. function function_name6
複製代碼
  1. function function_name0
複製代碼
  1. function function_name8
複製代碼
  1. function function_name5
複製代碼
  1. function function_name1
複製代碼
  1. {
複製代碼
  1. function function_name3
複製代碼
  1. }
複製代碼
  1. {4
複製代碼
  1. {5
複製代碼
  1. {6
複製代碼
  1. {7
複製代碼
  1. function function_name0
複製代碼
  1. function function_name1
複製代碼
  1. {
複製代碼
  1. ###命令集1
複製代碼
  1. ###命令集2
複製代碼
  1. }
複製代碼
  1. ###命令集4
複製代碼

Function5

Function5



让我们理解以上内容:

  • 在我们调用之后,我们添加了值“Hello”和“World”  myfunction 。
  • 这些值作为参数传递给myfunction并存储在局部变量中。
  • 解释器将传递的值存储到预定义变量中,这些变量根据传递参数的顺序命名,1作为起始名称直到传递顺序。
  • 请注意,“Hello”字存储在变量1中,值“World”存储在变量2中。
注意:上面的1和2是局部变量,因此,除了传递参数的函数之外,脚本的其他部分都无法访问它们。
  1. ###命令集5
複製代碼
  1. function function_name0
複製代碼
  1. function function_name1
複製代碼
  1. {
複製代碼
  1. ###命令集1
複製代碼
  1. ###命令集2
複製代碼
  1. }
複製代碼
  1. ###命令集4
複製代碼
  1. }3
複製代碼
  1. }4
複製代碼
在  echo $1   和  echo $2   我们的脚本的最后两行没有显示,因为解释不承认这两个变量,因为它们都是局部给myFunction。
让我们通过再举一个例子来更清楚地了解这一点:
我们将编写一个估计字符串长度的函数。该字符串将作为参数提供给函数。让我们'看看它会是怎样的。
嗯...在此之前,为什么我们不在Linux中增强一些有用的命令?
“  wc -l ”:计算行数
“  wc -w ”:计算单词数
“  wc -m ”:计算字符数


function6

function6















第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函数返回

Bash函数可以使用关键字return将函数的局部变量的值传递给主例程。然后将返回的值存储到默认变量$?我们来举个例子:

Shell脚本中的函数

Shell脚本中的函数

我们将参数int1和int2传递给add函数。接下来,该  add  函数通过该行处理它   sum=$(($1+$2)) 。然后sum变量的值通过该行传递给主程序   return $sum 。默认情况下,值   $sum  将存储到默认变量   $ ?最后,行echo  "The result is: " $? 显示结果。
注意:Shell脚本只能返回单个值。
递归函数意味着在函数定义中,并且在函数的代码内部,调用语句可以出现调用函数(被定义)本身。这应该由测试条件控制,以确保功能将收敛。如果没有指定条件,或者使用了错误的条件,该函数将永远调用自身。
现在使用一个因子示例来增强此递归函数:

function8

function8















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脚本中的函数。函数是实现特定任务的代码块。函数可以接受参数或根本不需要参数调用。我们用例子说明了我们的谈话。
我希望你发现这篇文章很有用。
如果您发现任何不正确的内容,或者您想要分享有关上述主题的更多信息,请撰写评论。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2218427/,如需转载,请注明出处,否则将追究法律责任。
廣告
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

廣告

廣告
操作系统 Fuchsia OS  |Microsoft Windows  |Android  |Chrome OS  |Novell  |Linux  |Mac OS X  |Unix  |FreeBSD  | Ubuntu
廣告

QQ|關于我們|聯繫我們|合作共赢|免責聲明|隐私条款|Archiver|手機版|拘留所|申請友鏈|付款方式|鲁虺繁体中文社区 |贊助我們 -

GMT+8, 2026-8-29 15:27 , Processed in 0.146008 second(s), 13 queries , WinCache On.

Powered by HCMS 1.0

© 2004-01-11 鲁虺文化网 版权所有

快速回復 返回頂部 返回列表