If Statements in Shell Scripts | Linux Terminal 201 - HakTip 182
目次:
意思決定は、コンピュータープログラミングの最も基本的な概念の1つです。 他のプログラミング言語と同様に、
if
、
if..else
、
if..elif..else
、およびBashのネストされた
if
ステートメントを使用して、特定の条件に基づいてコードを実行できます。
このチュートリアルでは、Bashの
if
ステートメントの基本を説明し、シェルスクリプトでそれらを使用する方法を示します。
if
ステートメント
条件が異なる形式を持つことができる
if
bash。 最も基本的な
if
ステートメントの形式は次のとおりです。
if TEST-COMMAND then STATEMENTS fi
if
ステートメントは
if
キーワードで始まり、
then
条件式と
then
キーワードが続きます。 ステートメントは
fi
キーワードで終了します。
TEST-COMMAND
が
True
と評価されると、
STATEMENTS
が実行されます。
TEST-COMMAND
が
False
返す場合、何も起こりません
STATEMENTS
は無視されます。
一般的に、常にコードをインデントし、コードブロックを空白行で区切ることをお勧めします。 ほとんどの人は、4スペースまたは2スペースのインデントを使用することを選択します。 インデントと空白行により、コードが読みやすく整理されます。
指定された数値が10より大きいかどうかを確認する次のスクリプト例を見てみましょう。
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." fi
コードをファイルに保存し、コマンドラインから実行します。
bash test.sh
スクリプトは、数字の入力を求めます。 たとえば、15を入力すると、15が10より大きいため、
test
コマンドは
true
と評価され、
then
句内の
echo
コマンドが実行されます。
The variable is greater than 10.
if..else
ステートメント
Bashの
if..else
ステートメントは次の形式を取ります。
if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi
TEST-COMMAND
が
True
と評価された場合、
STATEMENTS1
が実行されます。 それ以外の場合、
TEST-COMMAND
が
False
返すと、
STATEMENTS2
が実行されます。 ステートメントには
else
句を1つだけ
else
ことができます。
前のスクリプト例に
else
節を追加しましょう。
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi
if..elif..else
ステートメント
Bashの
if..elif..else
ステートメントの形式は次のとおりです。
if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi
TEST-COMMAND1
が
True
と評価された場合、
STATEMENTS1
が実行されます。
TEST-COMMAND2
が
True
と評価された場合、
STATEMENTS2
が実行されます。
STATEMENTS2
テストコマンドも
True
と評価されない場合、
STATEMENTS2
が実行されます。
ステートメントには1つ以上の
elif
句を
elif
ことができます。
else
節はオプションです。
条件は順番に評価されます。 条件が
True
返すと、残りの条件は実行されず、プログラム制御は
if
ステートメントの最後に移動します。
前のスクリプトに
elif
句を追加しましょう。
#!/bin/bash echo -n "Enter a number: " read VAR if] then echo "The variable is greater than 10." elif] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi
if
ステートメントのネスト
Bashでは
if
ステートメント内に
if
ステートメントをネストできます。 複数の
if
ステートメントを別の
if
ステートメント内に配置できます。
次のスクリプトは、3つの数字の入力を求め、3つの数字の中で最大の数字を出力します。
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] then if] then echo "$VAR1 is the largest number." else echo "$VAR3 is the largest number." fi else if] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi fi
出力は次のようになります。
Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number.
ネストされた
if
ステートメントを使用する代わりに、通常はcaseステートメントを使用する方が効率的です。
複数の条件
論理
OR
および
AND
演算子を使用すると、
if
ステートメントで複数の条件を使用できます。
以下に、3つの数字の中で最大の数字を出力するスクリプトの別のバージョンを示します。 このバージョンでは、ネストされた
if
ステートメントの代わりに、論理
AND
(
&&
)演算子を使用します。
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if] &&] then echo "$VAR1 is the largest number." elif] &&] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi
テストオペレーター
Bashでは、
test
コマンドは次の構文形式のいずれかを取ります。
test EXPRESSION]
テスト式を無効にするには、論理
NOT
(
!
)演算子を使用します。 文字列を比較するときは、単語の分割やグロビングの問題を避けるために、常に一重引用符または二重引用符を使用してください。
以下は、最も一般的に使用される演算子の一部です。
-
-n
VAR
-n
VAR
の長さがゼロより大きい場合は真。-z
VAR
-VARが空の場合はTrue。STRING1 = STRING2
-True [STRING1とSTRING2は等しい。STRING1 != STRING2
真のSTRING1とSTRING2は等しくありません。INTEGER1 -eq INTEGER2
真のINTEGER1とINTEGER2は等しい。INTEGER1 -gt INTEGER2
真のINTEGER1はINTEGER2より大きい。INTEGER1 -lt INTEGER2
-INTEGER1はINTEGER2よりも小さい。INTEGER1 -ge INTEGER2
真のINTEGER1はINTEGER2以上です。INTEGER1 -le INTEGER2
真のINTEGER1はINTEGER2以下です。-h
FILE
-FILEが存在し、シンボリックリンクである場合はtrue。-r
FILE
-FILEが存在し、読み取り可能な場合はtrue。-w
FILE
-FILEが存在し、書き込み可能な場合はtrue。-x
FILE
-FILEが存在し、実行可能であれば真。-d
FILE
-FILEが存在し、ディレクトリである場合はtrue。-e
FILE
-FILEが存在し、タイプ(ノード、ディレクトリ、ソケットなど)に関係なくファイルである場合はtrue。-f
FILE
-FILEが存在し、通常のファイル(ディレクトリまたはデバイスではない)である場合はtrue。
結論
if
、
if..else
および
if..elif..else
ステートメントを使用すると、特定の条件を評価することにより、Bashスクリプトの実行のフローを制御できます。
Bash forループ

Bashスクリプトには、forループ、whileループ、untilループの3つの基本的なループ構造があります。 このチュートリアルでは、Bashのforループの基本と、ループのフローを変更するbreakおよびcontinueステートメントについて説明します。
Bash:ファイルに追加

Linuxには、ファイルにテキストを追加する方法が複数あります。 この記事ではそれらのいくつかについて説明します。
bash(カウンター)で変数をインクリメントおよびデクリメントする方法

Bashスクリプトを記述するときの最も一般的な算術演算の1つは、変数の増分と減分です。 これは、ループでカウンターとして最もよく使用されますが、スクリプト内の他の場所でも発生する可能性があります。