第13回 関数で処理をまとめよう:定義・呼び出し・引数の基本 | はじめてのシェルスクリプト

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第13回 関数で処理をまとめよう:定義・呼び出し・引数の基本 | はじめてのシェルスクリプト
目次

はじめに

この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。

第11回・第12回では、for 文・while 文を使って処理を繰り返す方法を学びました。同じ操作を何度も書かずに済む「ループ」は、自動化の強力な武器になりましたね。

スクリプトが長くなってくると、今度は「同じ処理のまとまりを何度も書いている」という場面が出てきます。たとえば、エラーのときに表示するメッセージが複数箇所にあったり、同じチェック処理をスクリプトのいたるところで書いたりしていないでしょうか。

第13回では、処理を名前付きでひとまとめにして再利用できる「関数」を学びます。関数を使いこなせると、コードの見通しが良くなり、修正もずっと楽になります。プログラムらしい構造を組み立てる感覚を、一緒に身につけていきましょう。

この回で学ぶこと

  • 関数とは何か
  • 関数の定義の基本
  • 関数を呼び出す方法
  • 関数に引数を渡す基本
  • 処理をまとめる理由
  • 同じ処理を再利用する方法
  • 初学者がつまずきやすい書き方

関数とは何か

処理を名前付きでまとめる

関数は、複数の処理を名前付きでまとめたものです。

一度定義しておけば、同じ処理を何回でも呼び出せます。

関数を使う理由

同じ内容を何度も書かずにすみ、スクリプトを整理しやすくなります。

また、どの処理をしているかを名前で表せるので、読みやすくなります。

基本の形

関数の基本形は次のようになります。

greet() {
  echo "Hello"
}

この例では、greet という名前の関数を定義しています。

呼び出すときは、関数名をそのまま書きます。

greet

サンプルコード

function_sample.sh に次の内容を保存します。

#!/bin/sh

greet() {
  echo "Hello"
}

greet
greet

実行手順

1. ファイルを作成して保存する

エディタで function_sample.sh という名前のファイルを作成し、次の内容を保存します。

#!/bin/sh

greet() {
  echo "Hello"
}

greet
greet

2. スクリプトを実行する

次のコマンドを実行します。

sh function_sample.sh

実行結果は次のようになります。

Hello
Hello

同じ処理を2回呼び出していることが分かります。

コードの読み方

greet() { … }

この部分で、greet という名前の関数を定義しています。

波かっこ { } の中に、その関数が実行する処理を書きます。

greet

この行で関数を呼び出しています。

関数名を書くだけで、その中の処理が実行されます。

関数に引数を渡す

関数にも引数を渡せます。

たとえば、次のように書けます。

greet_name() {
  echo "Hello, $1"
}

greet_name Taro

この場合、関数の中では $1Taro が入ります。

実行結果は次のようになります。

Hello, Taro

処理をまとめる意味

関数を使うと、同じ処理を何度も書かずに済みます。

たとえば、あいさつの表示を何度も行うなら、関数にしておくと修正もしやすくなります。

1か所を直せば、呼び出しているすべての場所に反映されます。

初学者がつまずきやすい点

定義しただけで実行されると思ってしまう

関数は、定義しただけでは実行されません。

実行するには、関数名を書いて呼び出す必要があります。

関数名に () を付けて呼び出してしまう

呼び出すときは greet() ではなく、greet と書きます。

() を書くのは定義するときです。

引数の渡し方が分からなくなる

関数の後ろに値を書くと、それが関数の中で $1$2 として使えます。

よくあるエラー

関数を呼び出しても何も起きない

関数の中に echo などの処理が正しく書かれているか確認してください。

また、呼び出し行があるかも確認します。

parse error

波かっこ { } の位置や閉じ忘れがないか確認してください。

関数定義の形を見直します。

引数が空になる

関数を呼び出すときに値を渡しているか確認してください。

greet_name Taro

のように書かないと、$1 は空になります。

練習用コード

次の内容で show_message.sh を作成して実行してみてください。

#!/bin/sh

show() {
  echo "Message: $1"
}

show Apple
show Banana
show Orange

表示する値を変えながら、同じ関数を再利用できることを確認してください。

この回で理解しておくこと

  • 関数は処理を名前付きでまとめる仕組みである
  • name() { ... } の形で定義する
  • 呼び出すときは関数名をそのまま書く
  • 引数は関数の中で $1 などとして使える
  • 同じ処理を再利用しやすくなる
  • 定義と呼び出しは別であることを理解する必要がある

まとめ

今回は、関数を使って処理をまとめ、必要な場所で呼び出す基本を確認しました。

関数を使えるようになると、スクリプトを整理しやすくなり、同じ処理の再利用もしやすくなります。

次回は、数値の計算を行う方法を学びます。

次回予告

次回は「数値の計算をしてみよう」です。

$(( )) を使って、加算や減算などの基本的な計算を確認します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次