はじめに
この実験では、Linux のシェル関数を調べます。シェル関数は、特定のタスクを実行する再利用可能なコード ブロックであり、スクリプトをより整理されたものにして効率的にすることができます。シェル スクリプトで関数を作成、呼び出し、パラメータを使って使用する方法を学びます。この実験は初心者向けに設計されているため、段階的に進み、各概念を十分に説明します。
この実験では、Linux のシェル関数を調べます。シェル関数は、特定のタスクを実行する再利用可能なコード ブロックであり、スクリプトをより整理されたものにして効率的にすることができます。シェル スクリプトで関数を作成、呼び出し、パラメータを使って使用する方法を学びます。この実験は初心者向けに設計されているため、段階的に進み、各概念を十分に説明します。
まずは簡単なシェル関数を作成してみましょう。シェル関数は、より大きなスクリプト内のミニスクリプトのようなもので、特定のタスクを実行するコマンドをグループ化することができます。
まず、新しいファイルを作成する必要があります。端末を開き、次のコマンドを入力します。
cd ~/project
touch functions.sh
このコマンドは project
ディレクトリに移動し、functions.sh
という新しいファイルを作成します。このファイルにはシェル関数が含まれます。
では、最初の関数を追加してみましょう。
#!/bin/bash
## これは簡単な関数です
greet() {
echo "Hello, World!"
}
## この行は関数を呼び出し(実行)ます
greet
これを分解してみましょう。
#!/bin/bash
はシェバンと呼ばれます。これはシステムにこのスクリプトを解釈するために bash を使用するように指示します。greet() { }
で定義します。波括弧の中のすべてが関数の一部です。echo
コマンドがあり、"Hello, World!" を出力します。greet
は関数を呼び出し(実行)します。では、スクリプトを実行可能にして実行してみましょう。
chmod +x functions.sh
./functions.sh
次のような出力が表示されるはずです。
Hello, World!
この出力が表示されない場合は、functions.sh
ファイル内のコマンドを正しく入力したかどうかを再度確認してください。
基本的な関数を作成したので、これにパラメータを追加することでもっと柔軟にしてみましょう。パラメータを使うことで、関数に情報を渡すことができます。
再度 functions.sh
ファイルを開き、以下のコードで内容を置き換えます。
#!/bin/bash
## パラメータ付きの関数
greet() {
echo "Hello, $1!"
}
## 複数のパラメータ付きの関数
calculate() {
echo "The sum of $1 and $2 is $(($1 + $2))"
}
## 引数付きで関数を呼び出す
greet "Alice"
calculate 5 3
このコードを見てみましょう。
greet
関数では、$1
は関数に渡された最初の引数を指します。calculate
関数では、$1
と $2
はそれぞれ最初と2番目の引数を指します。$(($1 + $2))
は2つのパラメータの算術和を行います。./functions.sh
次のような出力が表示されるはずです。
Hello, Alice!
The sum of 5 and 3 is 8
この出力が表示されない場合は、ファイルに変更を正しく保存したことを確認してください。
シェル スクリプトでは、他のプログラミング言語と同じように関数から値を返すことはできません。代わりに、キャプチャできる結果を echo
するか、グローバル変数を変更することができます。両方の方法を調べてみましょう。
再度 functions.sh
を開き、以下のコードで内容を更新します。
#!/bin/bash
## 結果をechoする関数
get_square() {
echo $(($1 * $1))
}
## グローバル変数を変更する関数
RESULT=0
set_global_result() {
RESULT=$(($1 * $1))
}
## echoされた結果をキャプチャする
square_of_5=$(get_square 5)
echo "The square of 5 is $square_of_5"
## 関数を使ってグローバル変数を変更する
set_global_result 6
echo "The square of 6 is $RESULT"
これを分解してみましょう。
get_square
関数は echo
を使って結果を出力し、$()
構文を使ってそれをキャプチャします。set_global_result
関数はグローバル変数 RESULT
を変更します。get_square
の出力をキャプチャするために $()
を使います。RESULT
を変更する set_global_result
を呼び出し、その後 RESULT
を出力します。ファイルを保存して実行します。
./functions.sh
次のような出力が表示されるはずです。
The square of 5 is 25
The square of 6 is 36
この出力が表示されない場合は、functions.sh
ファイルの誤字を再度確認してください。
シェル スクリプトでは、変数はデフォルトでグローバルです。これは、スクリプト内のどこからでもアクセスできることを意味します。ただし、local
キーワードを使用して、関数内でのみアクセス可能な変数を作成することができます。これは、ローカル スコープと呼ばれます。
この概念を示すために、functions.sh
ファイルを変更しましょう。
以下のコードで内容を更新します。
#!/bin/bash
## グローバル変数
GLOBAL_VAR="I'm global"
## ローカル変数を持つ関数
demonstrate_scope() {
local LOCAL_VAR="I'm local"
echo "Inside function: GLOBAL_VAR = $GLOBAL_VAR"
echo "Inside function: LOCAL_VAR = $LOCAL_VAR"
}
## 関数を呼び出す
demonstrate_scope
echo "Outside function: GLOBAL_VAR = $GLOBAL_VAR"
echo "Outside function: LOCAL_VAR = $LOCAL_VAR"
このスクリプトで起こっていることは次のとおりです。
GLOBAL_VAR
を定義します。demonstrate_scope
関数内で、local
キーワードを使用してローカル変数 LOCAL_VAR
を定義します。ファイルを保存して実行します。
./functions.sh
次のような出力が表示されるはずです。
Inside function: GLOBAL_VAR = I'm global
Inside function: LOCAL_VAR = I'm local
Outside function: GLOBAL_VAR = I'm global
Outside function: LOCAL_VAR =
関数の外でアクセスするときに LOCAL_VAR
が空であることに注意してください。これは、ローカル変数はそれが定義された関数内でのみアクセス可能であるためです。
シェル関数の基本を学んだので、ここでは ENGLISH_CALC
というより高度な関数を作成しましょう。この関数は3つの引数を取ります。2つの数値と演算(足し算、引き算、または掛け算)です。
以下のコードで内容を置き換えます。
#!/bin/bash
ENGLISH_CALC() {
local num1=$1
local operation=$2
local num2=$3
local result
case $operation in
plus)
result=$((num1 + num2))
echo "$num1 + $num2 = $result"
;;
minus)
result=$((num1 - num2))
echo "$num1 - $num2 = $result"
;;
times)
result=$((num1 * num2))
echo "$num1 * $num2 = $result"
;;
*)
echo "Invalid operation. Please use 'plus','minus', or 'times'."
return 1
;;
esac
}
## 関数をテストする
ENGLISH_CALC 3 plus 5
ENGLISH_CALC 5 minus 1
ENGLISH_CALC 4 times 6
ENGLISH_CALC 2 divide 2 ## これはエラーメッセージを表示するはずです
この関数を分解してみましょう。
local
変数を使用しています。これは、グローバル変数と干渉しないようにするための良い慣例です。case
文を使用しています。これは他の言語の switch
文に似ています。echo
します。echo
して1を返します(シェルスクリプトでは、ゼロ以外の戻り値はエラーを示します)。ファイルを保存して実行します。
./functions.sh
次のような出力が表示されるはずです。
3 + 5 = 8
5 - 1 = 4
4 * 6 = 24
Invalid operation. Please use 'plus','minus', or 'times'.
この出力が表示されない場合は、functions.sh
ファイルの誤字を再度確認してください。
この実験では、Linuxにおけるシェル関数を、基本的なものからより高度な概念まで探索しました。以下のことを学びました。
echo
とグローバル変数を使って関数から値を返す方法シェル関数は、より組織的で効率的で再利用可能なコードを書くのに役立つ強力なツールです。複雑なスクリプトを小さくて管理しやすいピースに分解することができ、スクリプトを理解して保守するのを容易にします。
シェル関数をマスターすることで、Linux環境でより洗練されたシェルスクリプトを書き、複雑なタスクをより効果的に自動化することができます。覚えておいてください、練習がシェルスクリプトに精通する鍵です。作成した関数を変更したり、独自の関数を作成して、Linuxの作業で遭遇する特定の問題を解決してみてください。