bashで関数を使用する方法

このUnixシェルベースのPOSIX準拠のコンピューター言語を使用してBashで関数を使用する方法。 言語としての機能は、Linuxコマンドの解釈で構成されているため、繰り返しのプロセスを自動化し、オペレーティングシステムのコマンドからコマンドを作成することもできます。 この記事ではレビューします bashで関数を使用する方法。 どのように記事を読むことをお勧めします bashを使用して独自のスクリプトを作成する.

私たちが提案するスクリプトでは、Bash言語を使用して、ファイルの名前を知ってファイルを検索します。 このために使用します 検索コマンド しかし、前述のスクリプトで以前に定義された関数の助けを借りて。 すべての言語に存在するわけではないBashの特性または制限を考慮に入れる必要があります。 関数を呼び出すには、関数を定義する必要があります 以前に。

関数を定義する

関数を定義するには、次のXNUMXつの方法があります。関数宣言の有無:

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


スクリプト分析

定義

bashの場合 正常に完了したすべてのプロセスには、シグナルとしてコード「0」が必要です。。 12行目と13行目は、処理されるエラーコードを定義しています 成功のためのEXIT_OK y 失敗時に終了するためのEXIT_BAD.

15行目と16行目では、PATTERN変数とDIRECTORY変数に、スクリプト名の後にコマンドラインに表示される最初($ 1)と2番目($ XNUMX)のパラメーターが割り当てられています。

18行目 最初の関数を作成します。 «作成者»と呼ばれる関数は、 スクリプトの作成者 50〜54行目のifにあるように、「-a」引数を使用して呼び出す場合。 議論 "-そして" 23行目から «\ n»をエンコードすることにより、«次の行»のシーケンスを表示できます.

noparamsの呼び出し(28行目から37行目)は、パラメーターなしでスクリプトが呼び出されたときに発生する必要のあるイベントの管理を担当します。 改行コードで適切に囲まれ、スクリプトを31つのパラメーターで実行する必要があることを示すメッセージが表示され、次に使用するオプション(XNUMX行目)が表示されます。 read ヘルプを表示したい場合は、「S」または「s」を押すように求められます。 32行目で、文字通り次のように述べています。 $ REPLY)に大文字または小文字の '文字が含まれている場合、(33行目)は空の行(34行目)を表示し、ヘルプ関数(23〜26行目)を実行します。

検索を試みているディレクトリが存在しないことを検出すると、nodir関数(39〜42行目)が実行されます。

機能性

これで私たちはすでに持っています 必要なすべての機能を定義しました 実際には44行目から始まるプログラムを実行するには、スクリプトが受け取る最初のパラメーターが「-h」であるかどうかを確認し、trueの場合は、ヘルプ関数を実行して 正常終了を示す終了.

PATTERN(15行目で説明されている最初のパラメーター)が「-a」の場合、「-h」オプションについて前の段落で説明したのと同じメカニズムに従って作成者が表示されます。

ライン上 56つ以上のパラメータを受け取っていないことが管理されていますこの場合、noparams関数が実行され、60行目のifで次のことがわかります。 検索したいディレクトリが存在する場合、存在する場合は、空の行が表示されます。 検索コマンド 検索を実行するディレクトリのアドレスに続いて、パターン(探しているファイルの名前の先頭)に新しい空白行を追加し、 $を終了しますか? スクリプトの出力は、findによって生成された結果に委ねられます。 の状態の場合 ディレクトリの存在はfalseです (67行目)nodir関数を呼び出して 異常終了を示して終了します.

実行とテスト

$ encontrar
$ encontrar -a
$ encontrar -h
$ encontrar index aljflaskjf #directorio no existe
$ encontrar index public_html
$

En Bashに関する次の記事 のメカニズムを見ていきます 関数でパラメーターを使用するまた、その方法も見ていきます 返品データを明確にする それらの。

この投稿がお役に立てば幸いです。


記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   ジョシー

    こんにちは、
    非常に興味深く、非常に明確です。
    ただのメモ; 変数EXIT_BADの前の68行目に$がありません。
    私はあなたの記事で確実に学び続けます。