Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

実践編:制御構文と条件分岐・繰り返し

終了ステータスに基づく条件判定、if や switch による分岐処理、for や while ループ、および math コマンドによる数値計算を解説します。

条件判定の基本思想

fish の制御構文では、条件式として直接「コマンド」を指定します。そのコマンドの終了ステータス($status)が 0(成功)であれば真、0 以外(失敗)であれば偽 と判定されます。

値の比較やファイルの存在確認を行うには、標準の組み込みコマンド test を使用します。

# ファイルが存在するか判定
if test -f ./config.yaml
    echo "Config file exists."
end

test コマンドは角括弧 [ ... ] と同等ですが、fish では可読性の観点から test コマンドの明示的な記述が推奨されます。

条件分岐(if と switch)

直感的なブロック構文による分岐処理です。

» if / else if / else / end

Bash のような then や fi は不要で、すべて end でブロックを閉じます。

set -l response_code 200

if test $response_code -eq 200
    echo "Success: OK"
else if test $response_code -eq 404
    echo "Warning: Not Found"
else
    echo "Unknown status code: $response_code"
end

» switch / case / end

文字列の一致やワイルドカードによるパターン分類には switch を使用します。

set -l target_env "staging"

switch $target_env
    case "prod*"
        echo "Danger: Production environment!"
    case "stage" "staging"
        echo "Info: Staging environment."
    case "*"
        echo "Info: Development or local environment."
end

繰り返し構文(for と while)

リストの走査や反復処理を行うループ構文です。

» for ループ

リストの各要素を順番に取り出して処理します。

set -l servers web01 web02 db01

for s in $servers
    echo "Checking health of $s..."
end

# 連番の生成には seq コマンドを使用
for i in (seq 1 5)
    echo "Step: $i"
end

» while ループ

指定したコマンドが成功(ステータス 0)を返し続ける間、処理を反復します。

# 外部コマンドから1行ずつ読み込んで処理
while read -l line
    echo "Processing line: $line"
end < access.log

ループ内では break(ループの中断)や continue(次の反復へスキップ)が使用可能です。

算術計算(math コマンド)

fish は専用の算術展開記号(Bash の $(( ... )) 等)を持たず、組み込みの math コマンドを使用します。

math コマンドは整数の四則演算だけでなく、浮動小数点数(小数)の計算や数学関数の呼び出しにも標準で対応しています。

# 整数の計算
set total (math 10 + 20 \* 3)
echo "Total: $total"

# 小数の計算と四捨五入
set result (math "3.14159 * 2.5")
echo "Result: $result"

# べき乗や関数
math "sqrt(144)"
# 出力結果: 12