如何在Bash中使用函数

如何使用这种基于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的文章 我们将看到 在函数中使用参数我们还将看到如何 表达返回数据 其。

我希望并希望这篇帖子对您有所帮助。


发表评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   josea

    你好,
    非常有趣,非常清晰。
    只是一个音符; 变量EXIT_BAD前面的第68行缺少$。
    我将继续与您的文章一起学习。