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

Bashスクリプティング–条件付きステートメント

このガイドでは、例を使用してBashスクリプトでの条件ステートメントの使用法を学習します。意思決定はプログラミングの重要なステップです。特定の条件を満たす必要があり、それに基づいてロジックを作成する必要がある場合があります。これは、条件ステートメントが行うことです。条件文を使用すると、ロジックを記述して決定を下すことができます。ここで読む概念は、そこにあるすべてのプログラミング言語で同じですが、構文と実装が異なります。

条件文の構文

bashの条件文の構成要素は次のとおりです。

if [[ conditions ]]
then
   code
elif [[ conditions ]]
then
   code
else
   code
fi

コードの説明:

  1. キーワード"if" および"fi" 条件文の開始と終了をマークします。すべてのifステートメントの後に"then"を続ける必要があります キーワード。
  2. [[ ]]のいずれか または[ ] 状態を評価するために使用する必要があります。条件が「True」と評価された場合 、その後、コードのブロックが実行されます。
  3. 条件ステートメントには、1つのif条件と複数の elifを含めることができます。 条件。条件が真であると評価された場合、後続のすべての条件ステートメントはスキップされます。
  4. すべてのif またはelif ブロックはfalseであると評価されます 次に、 "else"からのコードのブロック 句が実行されます。
  5. 厳密なインデント規則はありませんが、コードブロック用に2つのスペースを残しておくと、読みやすくなります。

条件を評価するために、bashには "test"という組み込みコマンドがあります。 。角かっこはテストコマンドと同じであるため、テストコマンドまたは角かっこを使用できます。

$ type -a test
test is a shell builtin
test is /usr/bin/test
test is /bin/test

testでサポートされている演算子はたくさんあります 条件を評価するコマンド。次のセクションでこれらの演算子の使用方法を説明します。演算子のリストを取得するには、以下のコマンドのいずれかを実行できます。

$ man test
$ help test

ファイルテスト演算子

ファイルテスト演算子を使用して、ファイルまたはディレクトリオブジェクトを操作できます。ファイルテスト演算子を使用すると、特定のファイルまたはディレクトリが存在するかどうか、特定のオブジェクトがファイルまたはディレクトリであるか、処理しているファイルの種類、ファイルのサイズなどを検証できます。次のコマンドを実行して、ファイル演算子セクション。

$ man test

すべての演算子が頻繁に使用されるわけではありませんが、最も重要な演算子について説明します。

特定のファイルが存在するかどうかを確認するには、 -eを使用します 国旗。ここでは、 .bashrcかどうかを確認しています ファイルがホームディレクトリにあるかどうか。

if [[ -e /home/${USER}/.bashrc ]]
then
  echo "File is present"
else
  echo "File is not present"
fi

特定のディレクトリが存在するかどうかを確認するには、 -dを使用します 国旗。ここで、デスクトップをチェックしています ホームフォルダのディレクトリ。

if [[ -d ~/Desktop/ ]]
then
  echo "Directory is present"
else
  echo "Directory is not present"
fi

ファイルがゼロ以外のサイズであるかどうかを確認するには ファイルには、-s 国旗。ここでは、"zero_byte.txt"という名前のファイルを作成しました。 いくつかのテキストを追加しました。

$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

!を使用できます 結果を反転させるフラグが付いたシンボル。上記と同じ例を使用していますが、 "!" シンボル。そうでない場合でも、ファイルを反転してゼロバイトファイルとして出力します。

$ if [[ ! -s ~/Desktop/zero_byte.txt ]]
then
  echo "File is not zero byte"
else
  echo "File is zero byte"
fi

整数比較演算子

以下は、指定された2つの整数に対して評価される整数比較演算子です。

-eq => Integer X is equal to Integer Y
-ne => Integer X is not equal to Integer Y
-gt => Integer X is greater than Integer Y
-ge => Integer X is greater than or equal to Integer Y
-lt => Integer X is lesser than Integer Y
-le => Integer X is lesser than or equal to Integer Y

すべてのbashコマンドは、 0〜255の終了コードを返します。 整数比較演算子を使用して終了コードを評価します。以下の例では、 nvimの終了コードを割り当てています。 EXCODEという変数へのコマンド 整数比較を行います。 neovimは利用できないため、終了コード127をスローします (コマンドが見つからないというエラー)。

$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]]
then      
  echo "nvim is available to use"
elif [[ $EXCODE -eq 127 ]]
then
  echo "Command not found, check if nvim is installed or not"
else     
   echo "Return code is other than 0 & 127. Check and fix the error"
fi

上記の例では、elifを使用しました この記事の最初のステートメントのステートメント。まず、"if" 戻りコードがゼロであるかどうかを確認するために条件が評価され、falseが返され、制御がelifに渡されます。 ステートメントと条件はtrueと評価され、コードのブロックを実行します。 elifをいくつでも追加できます さまざまな条件を評価するためのステートメント。

1つのifで複数の条件を評価することもできます またはelif 論理AND、OR演算子を使用したステートメント。

LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.

以下は、論理的な ANDの例です。 整数が変数Xに格納されている演算子 およびY であると評価されます 。

$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

以下は、論理的な ORの例です。 変数Xの演算子 であると評価されます および変数Y falseと評価されます 。

$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]]
then
  echo "ok to proceed"
else
  echo "Not ok to proceed"
fi

コンパクトな条件文

ifを書く必要がある場合 およびelse ステートメントの場合、簡単な方法を使用できます。簡単に言うと、if..then..else..fiを使用する必要はありません。 キーワード。論理積(&&)を使用できます )および論理OR(|| )演算子。

[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>

以下の例を見てください。パッケージがneofetchかどうかを確認しようとしています 利用可能であり、利用できない場合はインストールしようとしています。

$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

コードの説明:

  • "which neofetch"を実行します コマンドを実行し、戻りコードがゼロの場合、&&の後に続くものはすべて オペレーターが実行されます。
  • 戻りコードがゼロより大きい場合(falseと評価される場合)、||の後に続くものはすべて オペレーターが実行されます。
  • これはifに似ています およびelse 声明。 "If" ステートメントは、条件が真であると評価された場合にのみ実行されます。この場合、それは AND オペレーター。同様に、else句は"if"の場合にのみ実行されます 条件はfalseと評価されます。この場合、それはまたは オペレーター。
  • 私のマシンにはneofetchがすでにインストールされているため、終了コードはゼロになります。 echoを実行します 指図。ネオフェッチがインストールされていない場合は、apt installが実行されます コマンド。

以下は、ファイルテスト演算子を使用してファイルがゼロバイトかどうかを確認する別の例です。

$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

文字列比較演算子

整数のように およびファイル テスト演算子には、文字列を操作するための一連の演算子があります。以下は、文字列演算子の重要なセットです。

-z => Check if string is NULL.
-n => Check if string is not NULL.
== => Check for string equality.
!= => Check for string inequality.

文字列がNULLかどうかを確認するには、-zを使用します および-n 国旗。コンパクトな条件文構文を使用して条件を評価しています。

$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

2つの文字列が等しいかどうかを確認するには、==を使用します オペレーター。文字列では大文字と小文字が区別されるため、この点を念頭に置いて比較を実行する必要があります。

$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

2つの文字列が等しくないかどうかを確認するには、!=を使用します オペレーター。

$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

結論

この記事では、bashで条件文を操作する方法を見てきました。また、ファイルテスト、整数、および文字列演算子の使用方法も確認しました。最後に、例を使用して、論理積および論理OR演算子を使用してコンパクトな条件ステートメントを作成する方法について説明しました。

フィードバックや提案があれば、コメントセクションを使用してください。元に戻せます。

Bashスクリプトガイド:

  • Bashスクリプティング–文字列操作
  • Bashスクリプティング–例を使用して説明されたPrintfコマンド
  • Bashスクリプティング–例を使用して説明されたインデックス付き配列
  • Bashスクリプティング–例を使用して説明された連想配列
  • Bashスクリプティング–例で説明されているForループ
  • Bashスクリプティング–ループの説明中およびループまで
  • 例を使用して説明されたBashリダイレクト
  • Bashスクリプティング–例で説明されている変数
  • Bashスクリプティング–例で説明されている関数
  • Linuxの例で説明されているBashEchoコマンド
  • 初心者向けのBashヒアドキュメントチュートリアル

Linux
  1. Bashスクリプト(I)

  2. バッシュ‘?

  3. root としても bash スクリプトを実行できませんか?

  1. ファイルまたはディレクトリがBashに存在するかどうかを確認する方法

  2. Bash:ファイルに書き込む

  3. Bashでファイルを1行ずつ読み取る方法

  1. Bashソースコマンド

  2. Bash:ファイルに追加

  3. LinuxでBashファイルテスト演算子を使用する方法