Unix / Linux - シェルの意思決定

こんにちは、将来のプログラマーさんたち!今日は、UnixおよびLinuxシェルスクリプトにおける興味深い意思決定の世界に飛び込みます。あなたの近所の親切なコンピュータ先生として、私はこの旅をステップバイステップで案内します。まずは、お気に入りの飲み物を用意して、リラックスし、一緒にこの冒険に乗り出しましょう!

Unix / Linux - Decision Making

if...else 文

コードの中で分岐点に立って、特定の条件に基づいて意思決定を行う必要があるとします。それが if...else 文が役に立つ場です。それらはプログラミングにおける信号機のように、条件が真であるか偽であるかによってコードを異なるパスに導きます。

基本的な if 文

まずは if 文の最も簡単な形式から始めましょう:

if [ condition ]; then
command1
command2
...
commandN
fi

以下は実際の例です:

#!/bin/bash
age=18

if [ $age -ge 18 ]; then
echo "You are old enough to vote!"
fi

この例では、age 変数が18以上かどうかを確認しています。それが true 的话、メッセージ "You are old enough to vote!" が表示されます。

if...else 文

では、条件が偽のときに何かを行いたい場合はどうでしょうか?それが else 節が役に立つ場です:

if [ condition ]; then
command1
command2
...
commandN
else
alternative_command1
alternative_command2
...
alternative_commandN
fi

投票の例を修正してみましょう:

#!/bin/bash
age=16

if [ $age -ge 18 ]; then
echo "You are old enough to vote!"
else
echo "Sorry, you're too young to vote."
fi

今度は、年齢が18未満の場合、メッセージ "Sorry, you're too young to vote." が表示されます。

if...elif...else 文

時々、人生(そしてコード)は黒か白だけではありません。しばしば複数の条件を確認する必要があります。それが elif (else if)節が役に立つ場です:

if [ condition1 ]; then
command1
elif [ condition2 ]; then
command2
else
alternative_command
fi

より複雑な例を作ってみましょう:

#!/bin/bash
grade=75

if [ $grade -ge 90 ]; then
echo "A - Excellent!"
elif [ $grade -ge 80 ]; then
echo "B - Good job!"
elif [ $grade -ge 70 ]; then
echo "C - You passed."
else
echo "F - You need to study more."
fi

このスクリプトは、生徒の成績を評価し、異なる成績範囲に基づいて適切なフィードバックを提供します。

case...esac 文

さて、バッフェットで複数の食べ物の選択肢があるとします。それがプログラミングにおける case...esac 文のようです。これは、値をパターンの一覧に対して一致させ、一致に基づいてコマンドを実行するものです。

基本的な構文は以下の通りです:

case expression in
pattern1)
command1
command2
...
commandN
;;
pattern2)
command1
command2
...
commandN
;;
*)
default_command
;;
esac

実際の例を見てみましょう:

#!/bin/bash
fruit="apple"

case $fruit in
"apple")
echo "It's a delicious red fruit!"
;;
"banana")
echo "It's a yellow curved fruit!"
;;
"orange")
echo "It's a juicy citrus fruit!"
;;
*)
echo "I don't know that fruit."
;;
esac

この例では、fruit の値を異なるパターンに対して一致させます。それが "apple" と一致する場合、対応するメッセージが表示されます。指定されたパターンと一致しない場合、デフォルトのケース(*)を実行します。

複数のパターン

同じセットのコマンドに対して複数のパターンを一致させることもできます:

#!/bin/bash
day=$(date +%A)

case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "It's a weekday. Time to work!"
;;
Saturday|Sunday)
echo "It's the weekend. Time to relax!"
;;
*)
echo "What planet are you on?"
;;
esac

このスクリプトは、現在の日を確認し、平日か週末かを表示します。

if...else と case...esac の比較

さて、これら2つの意思決定構造を比較してみましょう:

特性 if...else case...esac
複雑さ 複雑な条件に対応 簡単な値の一致に最適
読みやすさ 多数の条件で読みにくくなる 複数の条件で読みやすい
性能 多数の条件で少し遅い 多数の条件でより速い
柔軟性 任意の条件を使用可能 パターン一致に限られる

私が教えてきた年月の中で、生徒たちはしばしば if...elsecase...esac の選択に苦しみます。以下は簡単なルールです:単一の変数を複数の値に対して確認する場合、case...esac がお友達です。それ以外の場合は if...else を使いましょう。

覚えておいてください、プログラミングは料理のようです。これらの意思決定構造はあなたの材料であり、練習を重ねることで、完璧なディッシュ...つまり、スクリプトを創作するための方法を学びます!

結論として、意思決定はシェルスクリプトの重要な側面です。これにより、スクリプトが異なる状況に適応し、応答する能力を持つようになり、より強力で柔軟になります。if...else 也好、case...esac も好みに応じて使い、あなたのスクリプトをより賢くします。練習を続け、すぐに「sudo」と言うよりも早く意思決定を行うスクリプトを書けるようになるでしょう!

Credits: Image by storyset