Bashスクリプトの関数
関数でコードを整理し、再利用性を高めながら、スクリプトを読みやすく保守しやすくします。
「Bashスクリプトの関数」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Bash関数とは
Bashスクリプトでは、関数は特定のタスクを実行するコードのブロックです。メインスクリプト内の小さなスクリプトだと考えるとよいでしょう。
関数を使うと、次のことができます。
- コードの再利用:ロジックを一度だけ記述し、何度も呼び出せます。
- スクリプトの整理:複雑なタスクを、扱いやすい小さな単位に分割できます。
- 可読性の向上:スクリプトを理解しやすく、保守しやすくできます。
単純な関数を定義する
Bashで関数を定義する一般的な方法は2つあります。どちらも同じ結果になりますが、最初の構文が最もよく使われます。
この例を実行してみてください。関数は定義されますが、まだ呼び出されません。
#!/bin/bash
# Method 1: The most common way
my_first_func () {
echo "Hello from my_first_func!"
}
# Method 2: Using the 'function' keyword
function my_second_func {
echo "Hello from my_second_func!"
}
echo "Functions defined, but not called."関数を呼び出す
関数を定義しただけでは実行されません。関数内のコードを実行するには、他のコマンドと同じように、関数名を指定して呼び出します。
定義後にmy_functionを呼び出している点を確認してください。
#!/bin/bash
my_function () {
echo "This message is from inside the function."
}
echo "Script started."
my_function # Call the function here
echo "Script finished."関数内のローカル変数
デフォルトでは、Bash関数内で定義した変数はグローバルです。つまり、スクリプト内のどこからでもアクセスして変更できます。
意図しない副作用を防ぎ、関数を独立させるには、localキーワードを使って変数をローカルとして宣言します。ローカル変数は、その関数内でのみ存在します。
#!/bin/bash
global_message="I'm a global message"
my_function () {
local func_message="I'm a local message"
global_message="I've been changed by the function!"
echo "Inside func: $func_message"
echo "Inside func: $global_message"
}
echo "Before func: $global_message"
my_function
echo "After func: $global_message"
echo "After func: $func_message (This will be empty)"関数に引数を渡す
通常のシェルコマンドと同じように、引数を使って関数に情報を渡せます。関数内では、これらの引数に特殊変数でアクセスします。
$1、$2、$3…:個々の引数$#:引数の総数$@:個別の文字列として扱われるすべての引数
#!/bin/bash
greet_user () {
echo "Hello, $1!"
echo "You are $2 years old."
echo "Total arguments received: $#"
echo "All arguments: $@"
}
echo "Calling greet_user with two arguments:"
greet_user "Alice" 30
echo "\nCalling greet_user with one argument:"
greet_user "Bob"関数の終了ステータス(return)
関数は、他のコマンドと同様に終了ステータスを返します。慣例として、0は成功を意味し、0以外の値はエラーを示します。
returnキーワードを使って、この終了ステータスを設定します。その後、関数呼び出しの直後に特殊変数$?を使って確認できます。
#!/bin/bash
check_age () {
local age=$1
if [ "$age" -ge 18 ]; then
return 0 # Success: 18 or older
else
return 1 # Failure: under 18
fi
}
check_age 25
echo "Exit status for 25: $?"
check_age 16
echo "Exit status for 16: $?"
if check_age 20; then
echo "User is an adult."
else
echo "User is a minor."
fi関数の出力を取得する
returnは終了ステータスを返しますが、関数が変数に格納できる「値」を生成する場合は、その値を標準出力にechoする必要があります。
その後、関数呼び出しを$(...)で囲むコマンド置換を使って、この出力を取得します。
#!/bin/bash
get_full_name () {
local first_name=$1
local last_name=$2
echo "$first_name $last_name" # Echo the full name
}
name="$(get_full_name "John" "Doe")"
echo "Full name captured: $name"
calculate_area () {
local length=$1
local width=$2
echo $((length * width))
}
area=$(calculate_area 10 5)
echo "Calculated area: $area"実践例:ロガー
再利用可能な関数の実用例として、単純なロガーを見てみましょう。この関数をスクリプト全体で呼び出すと、タイムスタンプ付きでメッセージを表示できるため、デバッグや追跡が容易になります。
#!/bin/bash
log_message () {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
local message="$1"
echo "[$timestamp] $message"
}
log_message "Script execution started."
sleep 1 # Simulate some work
log_message "Processing user data..."
sleep 1
log_message "Operation completed successfully."関数のベストプラクティス
明確で保守しやすい関数を使ったスクリプトを書くには、次の点を意識してください。
- シンプルにする:各関数は、1つのことを適切に行うようにします。
- 意味のある名前:
validate_inputやcreate_backupのような、内容が分かる名前を使います。 localを使う:変数の衝突を避けるため、関数内の変数には必ずlocalを使います。- コメントを追加する:関数の動作、引数、戻り値を説明します。
- 入力を検証する:関数が特定の引数を想定している場合は、それらを確認します。
関数の引数チェック
Bash関数で引数がどのように渡され、アクセスされるかについての理解度を確認しましょう。
関数:まとめと次のステップ
よくできました。Bash関数を習得できました。
ここでは、次の内容を学びました。
- 関数の定義と呼び出し
- 変数のスコープに対する
localの使用 $1、$#、$@を使った引数の受け渡しreturnによる終了ステータスの設定echoとコマンド置換による出力の取得
関数は、モジュール化され、再利用可能で保守しやすいBashスクリプトを書くために不可欠です。練習を続けて、より強力で整理されたスクリプトを作成しましょう。
よくある質問
「Bashスクリプトの関数」レッスンは無料ですか?
はい。「Bashスクリプトの関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Bashスクリプトの関数」で何を学びますか?
関数でコードを整理し、再利用性を高めながら、スクリプトを読みやすく保守しやすくします。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Bashスクリプトの関数」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。