[A-00034]Shellで関数の作成・呼び出し

シェルスクリプトで別ファイルに作成した関数(Function)を呼び出し、実行したシェルの内部で動作させる方法について記載する。

まずはFunctionだけを定義した.shファイルを作成する。

#!/bin/bash

# ファイルの中身を一行づつ標準出力する
function readFile {
 FILE=$1

 while read LINE
 do
   echo "${LINE}"
 done < $FILE

}

上記はファイルの中身を一行づつ読み込んでコンソールに表示するだけのFunctionである。

Functionを定義する際には先頭に[function]キーワードを記述する。

そして上記における[readFile]はFunction名である。

引数がある場合でも、引数を明示的に定義する必要はない。

必要な引数は上記の通り「第一引数=$1」と定義するだけである。

次に実行シェルファイルを作成する。

#!/bin/bash

. ./func.sh

readFile ./test.csv

関数を呼び出す際には「. [パス名を含むファイル名]」という記述になる。先頭にドットをつけて半角スペースで空けてパス名を含むファイル名を指定する。

また次のような書き方もある。

#!/bin/bash

# Function呼び出し時にエラーを吐かれても無視する為、出力を/dev/nullに捨てる
. ./func.sh > /dev/null

readFile ./test.csv

まれに関数の中で更に別ファイルの読み込みを行おうとした際に見つからなくてエラーとなる事がある。

しかし、関数を定義したファイルの一部の関数だけを使用したい(エラーに関係ない関数)時にエラー出力を無視する為、ゴミ箱に捨てるよう上記のように定義する。

読み込みファイルは下記のファイルとする。

aiueo,kakikukeko,sashisuseso
tachitsuteto,naninuneno,hamihuhemo
rarirurero,wawiwo

実行結果は以下の通り

anonymous-MacBook-Pro:$ ./callFunc.sh 
aiueo,kakikukeko,sashisuseso
tachitsuteto,naninuneno,hamihuhemo
rarirurero,wawiwo

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*