共计 3434 个字符,预计需要花费 9 分钟才能阅读完成。
本篇内容介绍了“Shell 脚本中的函数怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Shell 脚本中的功能是什么?
函数是一组命令,这些命令被赋予一个名称,该名称的作用类似于该组命令的句柄。要执行函数中定义的这组命令,只需使用您提供的名称调用该函数即可。
在某些情况下,您需要执行一个代码块,该代码块在 shell 脚本的不同位置执行多次特定过程。Shell 函数类似于其他编程语言中的子例程,过程和函数。
为什么 Shell 脚本中的函数?
•它有助于我们重用代码。
•提高程序的可读性。
•在程序内有效使用变量。
•允许我们逐个测试程序。
•将程序显示为一系列子步骤。
要使用的语法:
Syntax1:
function function_name
{
### 命令集
}
Syntax2:
函数名()
{
#### 命令集
}
function 是声明函数定义的关键工作。
function_name 是声明的函数的名称。
Curly braces {
} 充当包含函数代码的分隔符。
命令集是调用函数时要执行的代码。
因此,首先声明一个函数,然后在需要时调用它。
在第一种语法中,您必须使用关键字函数,后跟函数名称以及打开和关闭括号和花括号,以将函数的内容与主例程分开。
在第二种语法中,由函数名称,开括号和闭括号以及花括号组成。
我们有一些 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)
让我们再来看一个例子:
创建后功能 myfunction 的,它然后通过调用其调用函数的名字我们的主程序。主例程将在我们的脚本中的任何位置,未定义为我们的函数的一部分。
#!/ 斌 / 庆典
MyFunction 的
()
{
回声 “哦!实际上,它的工作原理“
}
MyFunction 的
现在让我们重新安排我们的代码来测试函数是否可以在我们的脚本中的任何地方声明。
#!/ 斌 / 庆典
回声 “用于测试”
MyFunction 的
MyFunction 的
()
{
回声 “哦!实际上,它的工作原理“
}
线 3 在上面的代码段返回没有发现错误的命令。这只意味着:
该功能只适用,如果它是你的主程序之前声明。如果您在主程序之后声明了您的功能,则解释器将返回错误。
在函数上传递参数
您可以在 bash 函数中传递参数并处理这些数据。下面的代码显示了如何在 shell 脚本中传递值的过程:
#!/ 斌 / 庆典
MyFunction 的
()
{
echo “第一个参数是 $ 1 ”
echo “第二个参数是 $ 2 ”
}
myfunction“你好”“世界”
让我们理解以上内容:
在我们调用之后,我们添加了值“Hello”和“World” myfunction 。
这些值作为参数传递给 myfunction 并存储在局部变量中。
解释器将传递的值存储到预定义变量中,这些变量根据传递参数的顺序命名,1 作为起始名称直到传递顺序。
请注意,“Hello”字存储在变量 1 中,值“World”存储在变量 2 中。
注意:上面的 1 和 2 是局部变量,因此,除了传递参数的函数之外,脚本的其他部分都无法访问它们。
让我们通过下面的例子来识别上面的注意事项:
#!/ 斌 / 庆典
MyFunction 的
()
{
echo “第一个参数是 $ 1 ”
echo “第二个参数是 $ 2 ”
}
myfunction“你好”“世界”
回声 $ 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 函数返回
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 命令)。
“Shell 脚本中的函数怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!