GNU/Linux >> Linux の 問題 >  >> Linux

Bash If-Elseステートメント–知っておくべきことすべて

この記事では、Bashシェルスクリプトの基本について説明し、単一の ifを含む最も広く使用されている論理構造について説明します。 ステートメント、 if-else ステートメント、および elif 声明。これに加えて、文字列と数値を比較する正しい方法についても説明します。 Linuxシェルエクスペリエンスを5分で改善してください!

経験豊富なシステム管理者またはLinuxの初心者ユーザーであれば、シェルスクリプトの基礎を知っておく価値があります。このスキルにより、単一または複数のサーバー間で繰り返し可能なタスクを自動化することができます。通常、これらのタスクには、ソフトウェアのインストールとシステムサービスの構成が含まれます。

Ifステートメント

if ステートメントは、すべてのプログラミング言語の基本的なコアとして機能します。このステートメントは、プログラムまたはスクリプト内に意思決定ロジックを実装するのに役立ちます。そのため、さまざまな ifの使用方法を理解することが重要です。 ステートメント。

基本的な構文は次のとおりです。

if [ condition ]
then
  COMMANDS
fi

場所:

  • 状態 –は ifの論理演算子です ステートメント。
  • コマンド –条件がのときに実行されるコマンド 。
  • if、then、fi –は構文キーワードです。

最もよく使用されるテスト条件演算子のリストは次のとおりです。

オペレーター 説明
!表現 式は誤りです。
-n文字列 STRINGの長さがゼロより大きい。テキスト
-z文字列 STRINGの長さはゼロです(STRINGは空です)
STRING1 =STRING2 STRING1はSTRING2と同じです
STRING1!=STRING2 STRING1はSTRING2と等しくありません
INTEGER1 -eq INTEGER2 INTEGER1は数値的にINTEGER2と同じです
INTEGER1 -gt INTEGER2 INTEGER1はINTEGER2よりも数値的に大きい
INTEGER1 -lt INTEGER2 INTEGER1は数値的にINTEGER2よりも小さい
-eファイル ファイルが存在します
-dファイル FILEが存在し、ディレクトリです
-sファイル FILEが存在し、そのサイズがゼロより大きい(FILEは空ではありません。
-wファイル FILEが存在し、書き込み権限が付与されています。
-xファイル FILEが存在し、実行権限が付与されています。
-rファイル FILEが存在し、読み取り権限が付与されています。

最も興味深いのは、Bashスクリプトの実行中に、 []のすべてが テストに合格します ユーティリティ。trueのいずれかを返します またはfalse 。したがって、演算子の構文を忘れた場合は、そのマニュアルページを使用してください:

man test

最も単純なifを見てみましょう ステートメントの例:

#!/bin/bash
var=2
if [ $var -eq 2 ]
then
  echo "var equals 2"
fi

期待される出力:

var equals 2

上記の例では、変数 varを設定しています。 2の値 、次に、 var 値が等しい( -eq 2 メッセージを印刷しました。

実生活では、通常、 ifを使用しています Bashループ構造(forループ、whileループ、untilループ)と組み合わせたステートメント。 ifの使用例を次に示します。 forを含むステートメント -ループ:

#!/bin/bash
for var in 1 2 3 4 5
do
  if [ $var -eq 3 ]
  then
    echo "Value 3 found"
    break
  fi
  echo var=$var
done

期待される出力:

var=1
var=2
Value 3 found

この例では、 1の番号のリストを確認しています。 〜 5 for -ループして、処理したばかりの変数の値を出力します。値3が見つかると、スクリプトの実行が中断されます。

上記の例に加えて、 ifで数学計算の結果を使用できます。 ステートメント:

#!/bin/bash
for var in {1..10}
do
  if (( $var % 2 == 0 ))
  then
    echo "$var is even number"
  fi
done

上記の例では、 1の範囲の偶数をチェックしています。 および10

期待される出力:

2 is even number
4 is even number
6 is even number
8 is even number
10 is even number

これで、Bashコマンドの出力または実行結果を確認できます。ユーザーが/etc / passwdに存在することを確認してみましょう ファイル。

#!/bin/bash
user='root'
check_result=$( grep -ic "^$user" /etc/passwd )
if [ $check_result -eq 1 ]
then
  echo "$user user found"
fi

上記の例では、 grepを使用しています / etc / passwdを検索するコマンド ファイル:

grep -ic "^$user" /etc/passwd

場所:

  • -i –大文字と小文字を区別しない検索。
  • -c –見つかった行数を返します(0 –何も見つかりませんでした。何かが見つかった場合は1以上)。
  • 「^$user」 –開始する文字列を検索します( ^ $ userの値から 変数。

例内の他のすべては明確である必要があります。

期待される出力:

root user found

次に、 / etc / passwdであることを確認しましょう。 ファイルが存在します:

#!/bin/bash
file='/etc/passwd'
if [ -s $file ]
then
  echo "$file file found"
fi

期待される出力:

/etc/passwd file found

If-elseステートメント

基本的なifに慣れた後 ステートメント、Bashの使用方法を見てみましょう if-else ステートメント。

一般的な構文は次のとおりです。

if [ condition ]
then
  TRUE_COMMANDS
else
  FALSE_COMMANDS
fi

場所:

  • 状態 –は ifの論理演算子です ステートメント。
  • TRUE_COMMANDS –条件が真の場合に実行されるコマンド。
  • FALSE_COMMANDS –条件がfalseの場合に実行されるコマンド。
  • if、then、else、fi –は構文キーワードです。

それがどのように機能するかを示すために、偶数を検出した1つの例を変更してみましょう。それでは、どの数が偶数でどれが奇数かを印刷してみましょう:

#!/bin/bash
for var in {1..10}
do
  if (( $var % 2 == 0 ))
  then
    echo "$var is even number"
  else
    echo "$var is odd number"
  fi
done

期待される出力は次のとおりです:

1 is odd number
2 is even number
3 is odd number
4 is even number
5 is odd number
6 is even number
7 is odd number
8 is even number
9 is odd number
10 is even number

Elifステートメント

では、スクリプトの実行中にいくつかの異なる条件をチェックする必要がある場合はどうなるでしょうか。これは、「 else if」のショートカットであるelifステートメントを使用して行うこともできます。 」。

構文は次のようになります。

if [ condition_1 ]
then
  CONDITION_1_COMMANDS
elif [ condition_2 ]
then
  CONDITION_2_COMMANDS
else
  ALL_OTHER_COMMANDS
fi

場所:

  • condition_1 –は、 CONDITION_1_COMMANDSを実行するための論理条件です。 。
  • CONDITION_1_COMMANDS condition_1の場合に実行されるコマンド 本当
  • CONDITION_2_COMMANDS condition_2の場合に実行されるコマンド 本当
  • ALL_OTHER_COMMANDS condition_1のときに実行されるコマンド およびcondition_2 false
  • if、then、elif、else、fi –は構文キーワードです。

次の例を見てみましょう。

#/bin/bash

time=8
if [ $time -lt 10 ]
then
  echo "Good morning"
elif [ $time -lt 20 ]
then
  echo "Good day"
else
  echo "Good evening"
fi

この例では、時間を設定します 8に可変 AMで、時間の値に基づいてメッセージを出力しました。

期待される出力:

Good morning
ifステートメントのネスト

これで、基本に慣れたら、ifステートメントをネストする方法を学習してこのトピックを終了できます。

次に例を示します:

#/bin/bash

value=5
if [ $value -lt 10 ]
then
  if [ $value -eq 5 ]
  then
    echo "Value equals 5"
  else
    echo "Value not equals 5"
  fi
else
  echo "value is greater than 10"
fi

期待される出力は次のとおりです:

Value equals 5

ブール演算子

1回の場合で複数の条件を確認すると便利な場合があります 声明。次のブール演算子を使用してこれを行うことができます:

  • && –論理積。
  • || –論理OR。

簡単な例を次に示します。

#!/bin/bash
username="andrei"
birthday="12/16"
today=$( date +"%m/%d")
if [ $USER = $username ] && [ $today = $birthday ]
then
  echo "Happy birthday\!"
fi

この簡単な例では、2つの条件が真であるかどうかを確認しています。

  • ログインしているユーザーのユーザー名はandreiと同じである必要があります。
  • 今日の日付は12月16日です。

両方の条件が当てはまる場合は、「お誕生日おめでとう!」と印刷しています。

ケースステートメント

状況によっては、スクリプトをチェックインするために3つ以上のelifステートメントが必要になる場合があります。この場合、elifステートメントの使用は複雑になります。 Bashは、ケースを使用して、このような状況をより適切に処理する方法を提供します。 ステートメント。

構文は次のとおりです。

case VARIABLE in
  VALUE_1)
    COMMANDS_FOR_VALUE_1
    ;;
  VALUE_2)
    COMMANDS_FOR_VALUE_2
    ;;
  *)
    DEFAULT_COMMANDS
    ;;
esac

場所:

  • 可変 –値が VALUE_1と比較される変数 またはVALUE_2
  • COMMANDS_FOR_VALUE_1 VARIABLEのときに実行するコマンド 値はVALUE_1と同じです 。
  • COMMANDS_FOR_VALUE_2 VARIABLEのときに実行するコマンド 値はVALUE_2と同じです 。
  • DEFAULT_COMMANDS VARIABLEのときに実行するコマンド 値が上位条件の1つと等しくありませんでした。
  • ケース in esac –構文キーワード。

これは、スクリプトへの入力を処理し、ユーザーに基づいてサービスを開始、停止、または再起動するための非常に一般的なパターンです。入力:

#!/bin/bash

case $1 in
  start)
    echo "Starting the service"
    ;;
  stop)
    echo "Stopping the service"
    ;;
  restart)
    echo "Restarting the service"
    ;;
  *)
    echo "Unknown action"
    ;;
esac

この例では、特別な $ 1の値を確認しています。 Bash変数。スクリプトに提供される最初の引数が含まれています。たとえば、上記の例をファイル service.shに保存する場合 次のように実行します:

bash service.sh start

$ 1 値として「start」という単語が含まれます。

残りはcaseステートメントロジックによって処理されます。

概要

この記事では、Bashシェルスクリプトの基礎を取り上げ、単一の ifを含む最も広く使用されている論理構造について説明しました。 ステートメント、 if-else ステートメント、および elif ステートメント。

この記事がお役に立てば幸いです。もしそうなら、どうぞ、私たちがそれを世界に広めるのを手伝ってください!


Linux
  1. MySQLについて知っておくべきことすべて

  2. MySQLについて知っておくべきことすべて

  3. VPSホスティングとは何ですか?仮想プライベートサーバーについて知っておくべきことすべて

  1. Linux Time Commandの使用方法:知っておくべきことすべて

  2. Ubuntu13.04について知っておくべきことすべて

  3. システム管理者がBashの使用について知っておくべきこと

  1. Linuxファイル圧縮:知っておくべきことすべて

  2. Linuxファイルのパーミッション:知っておくべきことすべて

  3. IPv6について知っておくべきこと