Shellの基礎知識(入門編)

【Shell入門】関数で処理をまとめてみよう

同じ処理を何度も書くのは面倒…そんなときに便利なのが「関数」です。Shellスクリプトでも関数を使えば、処理の整理や再利用がカンタンにできます。

Shellの基礎知識

🟡 Shell の基礎知識(入門編)
📌 「動かす楽しさ」を最短で体感!Shellの第一歩をここから。

├─【Shell入門①】VSCode+WSLでShellを始めよう! 
├─【Shell入門②】echoで文字を表示してみよう 
├─【Shell入門③】変数を使って計算しよう 
├─【Shell入門④】条件分岐(if文)で処理を分けよう 
├─【Shell入門⑤】ループ処理(for文)を使ってみよう 
├─【Shell入門⑥】関数で処理をまとめてみよう 
└─【Shell入門⑦】アンケート集計スクリプトを作ってみよう 

🟡 Shell の基礎知識(基礎編)
📌 条件分岐やループなど、実務で通用する基本操作を網羅。

🟡 Shell の基礎知識(実践編)
📌 現場レベルの自動化スクリプトを実装しながら学ぶ実戦形式。

関数とは?Shellでの使い方を知ろう

同じ処理を何度も書くのは効率が悪く、ミスの元にもなります。Shellスクリプトでも「関数」を使えば、処理をひとまとめにして再利用できるようになります。

関数の役割と基本的な定義方法

スクリプト内で繰り返し使いたい処理を、あらかじめ「関数」として定義しておくと、見やすく・保守しやすいコードになります。まずは、基本の構文から確認してみましょう。

greet() {
  echo "こんにちは!"
}

ルーキー
おお!関数って、こんなふうに作れるんだね。JavaScriptっぽいかも?
似てるけど、Shellならではの特徴もあるから、次に呼び出し方を確認してみよう!
ビープロ

関数の呼び出し方と実行の流れ

定義した関数は、その名前をスクリプト内で呼び出すだけで実行されます。ただし、定義よりも前に呼び出そうとすると動作しないので注意しましょう。

greet

上のように書くだけで、関数の中の処理が実行されます。

ルーキー
めっちゃ簡単!名前を書くだけでOKなんだ!
そうそう、でも関数は定義してから呼び出すという順番が大事なんだ。ファイルの上の方に定義しておくと安全だよ。
ビープロ

このように関数を活用することで、スクリプトの読みやすさや再利用性が一気に高まります。

実践:関数で処理を再利用してみよう

関数の定義と呼び出し方を理解したら、実際に自分で関数を作って使ってみましょう。ここでは、挨拶を表示する関数を例に、再利用性のあるコードを書いていきます。

あいさつ関数を作ってみよう

まずは、固定のメッセージを出力する簡単な関数を作成してみましょう。

sayHello() {
  echo "こんにちは!"
}
sayHello

ルーキー
これ、上のsayHelloは何してるの?処理されてるの?
これは「sayHelloっていう関数はこういう動きをするよ」って教えてるだけなんだ。実際に処理が動くのは、下の sayHello を書いたところからなんだよ。
ビープロ

関数の定義は「準備」で、呼び出しが「実行」という流れを意識すると、関数の動きがぐっと分かりやすくなります。

ルーキー
関数の中に処理を書いて、名前で呼び出せば何回でも使えるんだね!
そうそう。同じ処理を何度も書く代わりに、関数にまとめて呼び出すだけで済むから効率的なんだ。
ビープロ

このコードは、たとえば greet.sh という名前でファイルに保存し、次のように実行できます:

sh greet.sh

ファイル名は自由に決めてOKですが、処理内容がわかる名前(greet.sh、say_hello.shなど)にしておくと管理しやすくなります。

ルーキー
なるほど〜!今までと同じ感じで「sh ファイル名.sh」で実行するんだね!
そうそう。これまでの復習も兼ねて、ファイル保存 → 実行の流れを繰り返していこう!
ビープロ

たとえば3回挨拶したいときも、次のように簡単に書けます:

sayHello
sayHello
sayHello

引数を使って関数をカスタマイズ

関数に引数を渡して、メッセージを変えられるようにしてみましょう。

sayHelloTo() {
  echo "こんにちは、$1さん!"
}
sayHelloTo BePro
sayHelloTo ルーキー

ルーキー
わっ!名前のところだけ変えられるんだ!便利だな〜。
うん、引数を使えば処理の中身を動的に変えられるんだよ。この $1 は、最初の引数って意味なんだ。
ビープロ

$1 は「関数に渡された1つ目の引数」を表します。 2つ目の引数なら $2、3つ目なら $3 というように、渡す順番で自動的に番号がつきます。

ルーキー
なるほど、$1って順番の1なんだね!だから「sayHelloTo ビープロ」って書いたら、ビープロが$1に入るってことか!
その通り!これが分かれば、引数付きの関数も自由自在に扱えるようになるよ。ちなみに、2つ以上の引数を受け取ることも可能なんだ。
ビープロ

関数でつまずかないための注意点

関数を使うときにありがちなつまずきポイントを事前に押さえておくことで、エラーや混乱を避けることができます。ここでは、定義順と戻り値に関する注意点を紹介します。

関数の定義場所と順番に注意

Shellスクリプトは上から下に処理されるため、関数を「定義より前で呼び出す」とエラーになります。必ず、関数を呼び出すより前に定義しておきましょう。

sayHello
sayHello() {
  echo "こんにちは!"
}

ルーキー
あれ?なんで上に書いたのに動かないの?順番の問題?
そう!Shellは上から順に処理するから、関数を使う前には必ず定義しておかないといけないんだ。
ビープロ

また、関数の定義は「処理の準備」にあたり、実際の実行は定義のあとに記述する必要があります。

戻り値とexitの違い(軽く補足)

関数から処理を抜けるには return を使いますが、 exit はスクリプト全体を終了させる命令です。

checkValue() {
  if [ "$1" -gt 10 ]; then
    return 0
  else
    return 1
  fi
}

ルーキー
じゃあ、関数の中でexit使っちゃうと、スクリプト全体が止まっちゃうの?
その通り。関数だけ終了したいときは return、スクリプト全体を止めたいときは exitを使い分けよう!
ビープロ

次のステップにつなげよう!

ここまでで関数の基本的な使い方が理解できました。次のステップとして、他の構文と組み合わせた活用方法にもチャレンジしていきましょう。

関数とループ・条件分岐を組み合わせてみよう

関数は単体でも便利ですが、ループ処理やif文と組み合わせることで実用性が一気に高まります。実務でもこのパターンは多く使われるので、次の記事ではそれを体験してみましょう。

ルーキー
関数って「まとめるだけ」かと思ってたけど、他の処理と組み合わせると一気にパワーアップするんだね!
その通り。繰り返しや条件判断と組み合わせてこそ、スクリプトが「考えて動く」ようになるんだ。
ビープロ

Shellの基礎知識で関数をさらに深掘りしたい方へ

入門記事では扱いきれない関数の応用や戻り値・引数の細かな扱い方、スクリプト設計のコツなどは「Shellの基礎知識」シリーズでさらに詳しく解説しています。関数をもっと深く理解したい方は、以下の関連記事もチェックしてみてください。

▶ 続きはこちら:Shell入門:アンケート集計スクリプトを作ってみよう

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?) 📌 IT初心者が最初に学ぶべき基本知識。ITの概念、ネットワーク、OS、クラウドの仕組みを学ぶ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか?無料で使えるだけでなく、高い柔軟性 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Shellの基礎知識(入門編)