如何使用这种基于Unix Shell的POSIX兼容计算机语言在Bash中使用函数。 作为一种语言,它的功能包括对Linux命令的解释,使我们能够自动执行重复的过程,并从操作系统命令中创建命令。 在本文中,我们将回顾 如何在bash中使用函数。 我建议阅读文章如何 使用bash创建自己的脚本.
在我们建议的脚本中,我们使用Bash语言知道文件的名称来搜索文件。 为此,我们将使用 查找命令 但借助先前在所述脚本中定义的功能。 您必须考虑并非所有语言都存在的Bash的特殊性或局限性: 调用一个函数,它必须被定义 以前。
定义功能
定义函数有两种方法:有或没有函数声明:
function nombre_funcion () { # codigo }
或另一种,我将在稍后使用。
nombre_funcion () { # codigo }
还 Bash还提供了一种传递参数并返回结果的方法。 我们将在以后的文章中看到。
#!/usr/bin/env bash # ~/.bin/encontrar # encuentra archivos a partir de la descripción de su nombre en un directorio específico # # Por Pedro Ruiz Hidalgo # version 1.0.0 # Copyright © enero 2017 # # EXIT_OK=0 EXIT_BAD=66 PATRON=$1 DIRECTORIO=$2 autor () { echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n" } ayuda () { echo -e "\nencontrar [PATRON] [DIRECTORIO]\n" } noparams () { echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n" read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r if [[ $REPLY =~ ^[Ss]$ ]]; then echo "" ayuda fi } nodir () { echo -e "\nDirectorio no Existe\n" } if [[ $PATRON == "-h" ]]; then ayuda exit $EXIT_OK fi if [[ $PATRON == "-a" ]]; then autor exit $EXIT_OK fi if [ $# -lt 2 ]; then noparams else if [ -d $DIRECTORIO ]; then echo "" find $DIRECTORIO -name $PATRON* echo "" exit $? else nodir exit EXIT_BAD fi fi
脚本分析
定义
对于重击 成功完成的每个过程都必须将代码“ 0”作为信号。 第12和13行定义了处理的错误代码 EXIT_OK成功 y EXIT_BAD失败退出.
在第15和16行中,为PATTERN和DIRECTORY变量分配了第一个($ 1)和第二个($ 2)参数,这些参数出现在脚本名称之后的命令行上,稍后我们将在执行脚本时看到。
在 18号线 我们创建我们的第一个功能。 称为“作者”的功能显示 脚本作者 当我们使用“ -a”参数调用它时,如第50〜54行的if中所见。 争论 “-和” 从第23行 允许通过编码«\ n»来显示«下一行»的序列.
调用noparams(第28〜37行)负责管理在没有任何参数的情况下调用脚本时必须发生的事件。 我们在新的行代码之间显示了正确的括起来,一条消息指示必须使用两个参数来执行脚本,然后显示一个选项(第31行) 读 如果您想显示帮助,它会提示您按“ S”或“ s”。 在第32行,我们从字面上说: $回复)包含大写或小写'的任何字符,然后(第33行)显示为空行(第34行)并执行帮助功能(第23〜26行)。
当我们检测到尝试搜索的目录不存在时,将执行nodir函数(第39〜42行)。
功能
有了这个,我们已经有了 定义了所有必要的功能 要执行实际上从第44行开始的程序,请检查脚本接收的第一个参数是否为“ -h”,如果为true,则执行帮助功能,并 表示正常终止的出口.
如果PATTERN(第15行中所述的第一个参数)为“ -a”,则将按照上一段中针对“ -h”选项说明的相同机制显示作者。
在线上 56我们没有收到少于两个参数的控制在这种情况下,将执行noparams函数,然后在第60行的if中找出 如果我们要进行搜索的目录存在,如果存在,则会显示一个空行, 查找命令 加上我们要在其上执行搜索的目录的地址,然后是模式(我们要查找的文件名开头),然后是一个新的空白行 退出$? 我们将脚本的输出委托给find产生的结果。 如果情况 目录存在是错误的 (第67行)我们调用了nodir函数, 我们退出,表示异常终止.
执行和测试
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En 以下有关Bash的文章 我们将看到 在函数中使用参数我们还将看到如何 表达返回数据 其。
我希望并希望这篇帖子对您有所帮助。
发表评论,留下您的评论
你好,
非常有趣,非常清晰。
只是一个音符; 变量EXIT_BAD前面的第68行缺少$。
我将继续与您的文章一起学习。