導入
同じ3行を、スクリプトの中で4回書いている。そんなときは関数の出番です。名前を付けてまとめてしまえば、呼び出しは1行になり、直すときも1か所で済みます。
説明
関数は 名前() { … } で定義し、名前を書くだけで呼び出せます。
#!/bin/bash
log() {
echo "[$(date +%H:%M:%S)] $1"
}
log "処理を開始します"
log "ファイルを読み込みました"
log "処理が完了しました"
書き方の決まりごと。
名前() {…()の中には何も書かない(引数はここでは宣言しない)}で閉じる- 呼び出しはコマンドと同じ。
log "メッセージ"のように、括弧もカンマも使いません - 定義は呼び出しより前に書く(上から順に読まれるため)
引数の受け取り方は、スクリプト本体と同じ $1・$2・$# です。関数の中では、その関数に渡された値を指します。
flowchart LR
A["log \"開始\" と書く"] --> B["log 関数の中へ"]
B --> C["$1 = 開始"]
C --> D["[10:23:45] 開始 を表示"]
「時刻つきでログを出す」ようなお決まりの処理は、関数にしておくと後から書式を変えるのが一瞬です。log() の中を1行直せば、呼び出している全箇所の書式が変わります。
関数名は
snake_case(小文字とアンダースコア)が慣習です。check_file・send_alertのように、動詞から始めると読んだときに意図が伝わります。
やってみよう
スクリプトを実行して、3行すべてに時刻が付くことを確かめましょう。次に log() の中を echo "[LOG] $1" に書き換えて実行してください。1か所直しただけで3行すべての書式が変わる——これが関数のいちばんの価値です。
演習
log 関数を使って 準備が整いました というメッセージを出してください。
ヒント1を見る
関数は log "メッセージ" の形で呼びます。
ヒント2を見る
スクリプトの最後に log "準備が整いました" を足します。