如何在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.   喬西 他說:

    HOLA,
    非常有趣,非常清晰。
    只是一個音符; 變量EXIT_BAD前面的第68行缺少$。
    我將繼續與您的文章一起學習。