テクノロジー LINUX Bash スクリプトとは何か、および Linux での書き方

Bash スクリプトとは何か、および Linux での書き方

複数回繰り返す必要がある一連の Linux コマンドがあるとします。コマンドを 1,000 回書いて自分の運命を呪うか、Linux で小さくて単純な bash スクリプトを作成して、この退屈なタスクを自動化することができます。この記事では、bash スクリプトとは何か、その利点、Linux での bash スクリプトの作成方法について説明します。

 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

LinuxのBashスクリプトとは何ですか

映画の脚本が俳優に特定のシーンをどのように演じるかのアイデアを与えるのと同じです。同様に、Bash スクリプトは、実行するとシェル プロンプトに入力されたかのように動作する 一連の Linux コマンドを 含むファイルであり、それによってワークフローが自動化されます。すべての bash スクリプトには .sh 拡張子、「shebang 行」 – #/bin/bash が付いており、シェル プロンプト経由で直接実行できます。

つまり、bash スクリプトは、特定のタスクに対して個別に実行する必要があるすべてのコマンドをグループ化します。 Linux の bash スクリプトとは何かを理解したところで、次にその利点を見てみましょう。

 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux で Bash スクリプトを使用する利点

一般に、Bash スクリプトは強力で多用途のツールであり、すべてのシステム管理者、開発者、パワー ユーザーにとって不可欠な部分となっています。 bash スクリプトを使用する主な利点は次のとおりです。

  • 自動化 : これは、おそらく bash スクリプトを使用することで最も求められている利点です。 bash スクリプトを使用すると、最も退屈で反復的なタスクであっても自動化できるため、労力が軽減され、時間が節約され、エラーが最小限に抑えられます。
  • 柔軟性 : ニーズに合わせてカスタム bash スクリプトを作成できます。外部アプリケーションやスクリプトを統合して、ワークフローをさらに合理化することもできます。
  • 移植性 : 特定のタスクを実行する bash スクリプトを作成すると、必要な依存関係がシステムにインストールされていれば、この bash スクリプトはどの Linux ディストリビューションでも動作します。 bash スクリプトは、macOS などの他の Unix 系システムや、WSL 経由の Windows でも使用できます。
  • 統合 : Bash スクリプトは、データベースや API などの他のツール、さらにはユーザーが複雑なタスクに対してサードパーティ ツールの可能性を最大限に活用できるようにする他の bash スクリプトと統合できます。
  • 記述が簡単 : Linux ユーザーがすでに慣れ親しんでいる簡単な構文のおかげで、Bash スクリプトは非常に簡単に記述できます。 bash スクリプトを作成するのに特別なツールやソフトウェアは必要ありません。これにより、アイデアや新しいツールのプロトタイピングを迅速に行うことができます。
  • 学習曲線が低い : Bash スクリプトは学習曲線が比較的低いため、初心者と経験豊富なユーザーの両方にとって理想的な選択です。
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux の基本的な Bash スクリプト コンポーネント

見回してみると、ほとんどすべての bash スクリプトは、構成要素として機能するいくつかの共通かつ基本的なコンポーネントで構成されています。これらのブロックは、スクリプト全体に機能構造を追加します。

1. シバン (#!)

すべての bash スクリプトは、使用される Linux インタープリターのパスを指定する「Shebang 行」で始まります。次のように書かれています。

 #!/bin/bash

2. Bash スクリプトのコメント

bash スクリプトの実行時にコメントはインタプリタによって単に無視される場合でも。これらは、コードに関する追加情報をユーザーに提供するためにのみ使用されます。また、コード全体の可読性も向上します。 bash スクリプトにコメントを記述するには、行の先頭に八角形 (#) を追加するだけです。

例えば:

 # This is a comment line

3. 変数

bash スクリプトの変数は、さまざまな種類のデータをメモリに一時的に保存するのに役立ちます。 bash スクリプトで変数に値を割り当てるには、次の構文を使用します。

 <variable_name>=<value_to_store>

たとえば、変数「name」内に「John」を格納するには、次のようにします。

 name="John"

「name」変数内に格納されている値にアクセスするには、単に「$」記号を前に追加します。

 echo "Hello, $name"

ここでは、「name」変数内に格納されている値が echo ステートメントに挿入され、最終出力が次のように出力されます。

 Hello, John

4. echoコマンド

echo コマンドは、値を出力として表示するために使用される、シンプルですが便利なコマンドです。 echo コマンドを使用して出力する構文は次のとおりです。

 echo <value_to_print>

5. Bash スクリプトの If-Else

さまざまな条件に応じて、状況に応じた決定を下す必要がある場合があります。 bash では、次の構文を使用して if then 、および else コマンドを使用してさまざまな決定を下すことができます。

 if [ condition ]
then
    # code to be executed if the condition is true
else
    # code to be executed if the condition is false
fi

bash で条件付きスクリプトに使用できるさまざまな文字セットを次に示します。

キャラクターセット 説明
&& 論理積。 2 つの条件を比較するために使用され、両方の条件が満たされる場合にのみ true を返します。
-eq に等しい; 2 つの値が等しいかどうかを確認するために使用されます
-ね 等しくない;ある値が別の値と等しくないかどうかを確認します
-lt 未満;最初の値が 2 番目の値より小さいかどうかを確認するために使用されます
-gt より大きい;最初の値が 2 番目の値より大きいかどうかを確認します
-le 以下;最初の値が 2 番目の値以下であるかどうかを確認します
-ge 以上;最初の値が 2 番目の値以上であるかどうかを確認します

たとえば、変数内の 2 つの値が等しいかどうかを確認するには、次のようにします。

 if [ $a -eq $b ]
then
    echo "Equal"
else
    echo "Not Equal"
fi

6. ループ

ループは、一連のステートメントまたはコマンドを複数回繰り返す必要がある場合に使用されます。 bash スクリプトでは、ループのニーズに合わせて「For ループ」または「while ループ」を使用できます。

For ループ

「For ループ」はループ構造の一種で、ステートメントのグループを何回繰り返す必要があるか、またはリストを確認するために使用する必要があることが正確にわかっている場合に使用されます。 Linux bash スクリプトで for ループを使用する構文は次のとおりです。

 for <loop_variable> in <sequence>
do
    # commands to be executed for each item in the <sequence>
done

上記の構文の内訳は次のとおりです。

  • <loop_variable> は、 各反復中に <sequence> の各項目を保持する一時変数を指します。 <loop_variable> には任意の名前を選択できます。
  • <sequence> に は、for ループが反復される項目が含まれます。次のように <sequence> を指定できます。
    • 数値の範囲 : 等間隔に並んだ一連の数値です。次の構文を使用して範囲を生成できます: “{<start_number> .. <終了番号> }”。
    • 項目のリスト : item1 item2 item3 のように、スペースで区切られた項目の明示的なリストを指定できます。
    • コマンド出力 : コマンドからの出力も、 $(<command>) のような構文を使用して <sequence> として使用できます。
  • do は、 繰り返し実行する必要があるステートメントを含むループ本体の開始を示します。
  • 「done」は ループの終わりを示します。

たとえば、1 から 5 までのすべての整数を出力するには、次のようにします。

 for i in {1..5}
do
    echo "Number: $i"
done

While ループ

一般に、while ループは、特定のステートメントのセットを何回繰り返す必要があるか正確にわからない場合に使用されます。特定の設定条件が満たされるまで、ステートメントを繰り返します。 while ループを使用する構文は次のとおりです。

 while [ <test_condition> ]
do
    # commands to be executed while the condition is true
done

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

  • <test_condition> は、 すべての反復の前に、満たされているかどうかを確認するためにテストされる条件を指します。条件が満たされなくなると、ループ本体には入らずにループが終了します。
  • do は、 繰り返し実行する必要があるステートメントを含むループ本体の開始を示します。
  • 「done」は ループの終わりを示します。

たとえば、1 から 5 までのすべての整数を出力するには、次のようにします。

 i=1
while [ $i -le 5 ]
do
    echo "$i"
    i=$((i + 1))
done
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux で Bash スクリプトを作成する方法

Linux での bash スクリプトの基本的な構成要素については理解できたので、次は Linux システム用の bash スクリプトの作成方法に進みます。

ステップ 1: 新しいファイルを作成する

Linux で使用できる主要なテキスト エディターのいずれかを使用して、新しいファイルを作成できます。スクリプト ファイルの拡張子は必ず .sh にしてください。たとえば、nano テキスト エディタで「test.sh」という名前のテストを作成します。

 nano test.sh

ステップ 2: シバン ラインを定義する

シバン行は、bash スクリプトの実行に使用するインタープリターへのパスを定義します。これはすべての bash スクリプトの最初の行であり、一般的に次のように書かれます。

 #!/bin/bash

または

#!/bin/sh

スクリプトに他のインタープリターを使用する必要がある場合は、次の構文を使用します。

 #!/usr/bin/env <interpreter>

: 作成するすべての bash スクリプトにコメントを追加することは必須ではありませんが、コメントを追加するとコード全体の読みやすさが向上します。オクトソープ シンボルを使用して、スクリプトにコメントを追加します。ファイルが実行されると、すべてのコメントはインタープリタによって無視されます。

ステップ 3: コマンドとコードを追加する

これで、bash コンポーネントを使用して必要なコマンドと命令を追加し、すべてを論理的に組み合わせることができます。ディレクトリ内のすべての .txt ファイルを別のディレクトリに移動するプロセスを自動化する必要があるとします。次の bash スクリプトを使用して、すべての .txt ファイルを Linux システムの別のディレクトリに移動します。

 #!/bin/bash

# Create a directory to store text files
mkdir -p TextFiles

# Move all .txt files to the TextFiles directory
for file in *.txt
do
    if [ -f "$file" ]; then
        mv "$file" TextFiles/
        echo "Moved: $file to TextFiles/"
    fi
done

echo "File organization complete!"

複雑そうですか?それを部分に分けてみましょう:

  • #!/bin/bash はシバン行で、スクリプトが bash インタープリタで実行されることを指定します。
  • # Create a directory to store text files # Move all .txt files to the TextFiles directory
  • mkdir -p TextFiles 現在のディレクトリに「TextFile」という名前の新しいディレクトリが存在しない場合に作成します。
  • for file in *.txt for ループを使用してすべての .txt ファイルを反復処理します。
  • do ループの開始を意味します
  • if [ -f "$file" ]; then 現在のアイテムが通常のファイルかどうかを確認します
    • 上記の条件が満たされる場合、現在のファイルは mv "$file" TextFiles/ によって TextFiles ディレクトリに移動されます。
    • echo "Moved: $file to TextFiles/" ファイルが TextFiles ディレクトリに移動されたことを示すメッセージをコンソールに表示します
  • fi 、if ブロックが現在の反復で実行を終了したことを示します。
  • done 、for ループ ブロックの実行が終了したことを示します。
  • すべての txt ファイルが移動されると、 echo "File organization complete!" 最終メッセージがコンソールに表示されます。

ステップ 4: スクリプトを保存する

bash スクリプトの作業が終了したら、ファイルを保存してエディターを終了します。

ステップ 5: ファイルを実行可能にする

一般に、Linux ではすべてのスクリプト ファイルをすべてのタイプのユーザーが実行できるわけではありません。 bash スクリプトを実行可能にするには、次のコマンドを使用します。

 chmod +x <filename>

たとえば、ファイル test.sh を実行可能ファイルにするには、次のようにします。

 chmod +x test.sh

ステップ 6: ファイルを実行する

bash スクリプトを実行可能として作成したら、次の構文でファイルを実行します。

 ./<filename>

test.sh ファイルを実行するには:

 ./test.sh 
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

絶対に観るべき!「 Bash スクリプトとは何か、および Linux での書き方」についてベスト動画選定

モテる!シェルスクリプト入門講座。シェルとは〜基本操作までを解説
【初心者向け】シェルスクリプト書き方編【前編】

複数回繰り返す必要がある一連の Linux コマンドがあるとします。コマンドを 1,000 回書いて自分の運命を呪うか、Linux で小さくて単純な bash スクリプトを作成して、この退屈なタスクを自動化することができます。この記事では、bash スクリプトとは何か、その利点、Linux での bash スクリプトの作成方法について説明します。

 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

LinuxのBashスクリプトとは何ですか

映画の脚本が俳優に特定のシーンをどのように演じるかのアイデアを与えるのと同じです。同様に、Bash スクリプトは、実行するとシェル プロンプトに入力されたかのように動作する 一連の Linux コマンドを 含むファイルであり、それによってワークフローが自動化されます。すべての bash スクリプトには .sh 拡張子、「shebang 行」 – #/bin/bash が付いており、シェル プロンプト経由で直接実行できます。

つまり、bash スクリプトは、特定のタスクに対して個別に実行する必要があるすべてのコマンドをグループ化します。 Linux の bash スクリプトとは何かを理解したところで、次にその利点を見てみましょう。

 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux で Bash スクリプトを使用する利点

一般に、Bash スクリプトは強力で多用途のツールであり、すべてのシステム管理者、開発者、パワー ユーザーにとって不可欠な部分となっています。 bash スクリプトを使用する主な利点は次のとおりです。

  • 自動化 : これは、おそらく bash スクリプトを使用することで最も求められている利点です。 bash スクリプトを使用すると、最も退屈で反復的なタスクであっても自動化できるため、労力が軽減され、時間が節約され、エラーが最小限に抑えられます。
  • 柔軟性 : ニーズに合わせてカスタム bash スクリプトを作成できます。外部アプリケーションやスクリプトを統合して、ワークフローをさらに合理化することもできます。
  • 移植性 : 特定のタスクを実行する bash スクリプトを作成すると、必要な依存関係がシステムにインストールされていれば、この bash スクリプトはどの Linux ディストリビューションでも動作します。 bash スクリプトは、macOS などの他の Unix 系システムや、WSL 経由の Windows でも使用できます。
  • 統合 : Bash スクリプトは、データベースや API などの他のツール、さらにはユーザーが複雑なタスクに対してサードパーティ ツールの可能性を最大限に活用できるようにする他の bash スクリプトと統合できます。
  • 記述が簡単 : Linux ユーザーがすでに慣れ親しんでいる簡単な構文のおかげで、Bash スクリプトは非常に簡単に記述できます。 bash スクリプトを作成するのに特別なツールやソフトウェアは必要ありません。これにより、アイデアや新しいツールのプロトタイピングを迅速に行うことができます。
  • 学習曲線が低い : Bash スクリプトは学習曲線が比較的低いため、初心者と経験豊富なユーザーの両方にとって理想的な選択です。
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux の基本的な Bash スクリプト コンポーネント

見回してみると、ほとんどすべての bash スクリプトは、構成要素として機能するいくつかの共通かつ基本的なコンポーネントで構成されています。これらのブロックは、スクリプト全体に機能構造を追加します。

1. シバン (#!)

すべての bash スクリプトは、使用される Linux インタープリターのパスを指定する「Shebang 行」で始まります。次のように書かれています。

 #!/bin/bash

2. Bash スクリプトのコメント

bash スクリプトの実行時にコメントはインタプリタによって単に無視される場合でも。これらは、コードに関する追加情報をユーザーに提供するためにのみ使用されます。また、コード全体の可読性も向上します。 bash スクリプトにコメントを記述するには、行の先頭に八角形 (#) を追加するだけです。

例えば:

 # This is a comment line

3. 変数

bash スクリプトの変数は、さまざまな種類のデータをメモリに一時的に保存するのに役立ちます。 bash スクリプトで変数に値を割り当てるには、次の構文を使用します。

 <variable_name>=<value_to_store>

たとえば、変数「name」内に「John」を格納するには、次のようにします。

 name="John"

「name」変数内に格納されている値にアクセスするには、単に「$」記号を前に追加します。

 echo "Hello, $name"

ここでは、「name」変数内に格納されている値が echo ステートメントに挿入され、最終出力が次のように出力されます。

 Hello, John

4. echoコマンド

echo コマンドは、値を出力として表示するために使用される、シンプルですが便利なコマンドです。 echo コマンドを使用して出力する構文は次のとおりです。

 echo <value_to_print>

5. Bash スクリプトの If-Else

さまざまな条件に応じて、状況に応じた決定を下す必要がある場合があります。 bash では、次の構文を使用して if then 、および else コマンドを使用してさまざまな決定を下すことができます。

 if [ condition ]
then
    # code to be executed if the condition is true
else
    # code to be executed if the condition is false
fi

bash で条件付きスクリプトに使用できるさまざまな文字セットを次に示します。

キャラクターセット 説明
&& 論理積。 2 つの条件を比較するために使用され、両方の条件が満たされる場合にのみ true を返します。
-eq に等しい; 2 つの値が等しいかどうかを確認するために使用されます
-ね 等しくない;ある値が別の値と等しくないかどうかを確認します
-lt 未満;最初の値が 2 番目の値より小さいかどうかを確認するために使用されます
-gt より大きい;最初の値が 2 番目の値より大きいかどうかを確認します
-le 以下;最初の値が 2 番目の値以下であるかどうかを確認します
-ge 以上;最初の値が 2 番目の値以上であるかどうかを確認します

たとえば、変数内の 2 つの値が等しいかどうかを確認するには、次のようにします。

 if [ $a -eq $b ]
then
    echo "Equal"
else
    echo "Not Equal"
fi

6. ループ

ループは、一連のステートメントまたはコマンドを複数回繰り返す必要がある場合に使用されます。 bash スクリプトでは、ループのニーズに合わせて「For ループ」または「while ループ」を使用できます。

For ループ

「For ループ」はループ構造の一種で、ステートメントのグループを何回繰り返す必要があるか、またはリストを確認するために使用する必要があることが正確にわかっている場合に使用されます。 Linux bash スクリプトで for ループを使用する構文は次のとおりです。

 for <loop_variable> in <sequence>
do
    # commands to be executed for each item in the <sequence>
done

上記の構文の内訳は次のとおりです。

  • <loop_variable> は、 各反復中に <sequence> の各項目を保持する一時変数を指します。 <loop_variable> には任意の名前を選択できます。
  • <sequence> に は、for ループが反復される項目が含まれます。次のように <sequence> を指定できます。
    • 数値の範囲 : 等間隔に並んだ一連の数値です。次の構文を使用して範囲を生成できます: “{<start_number> .. <終了番号> }”。
    • 項目のリスト : item1 item2 item3 のように、スペースで区切られた項目の明示的なリストを指定できます。
    • コマンド出力 : コマンドからの出力も、 $(<command>) のような構文を使用して <sequence> として使用できます。
  • do は、 繰り返し実行する必要があるステートメントを含むループ本体の開始を示します。
  • 「done」は ループの終わりを示します。

たとえば、1 から 5 までのすべての整数を出力するには、次のようにします。

 for i in {1..5}
do
    echo "Number: $i"
done

While ループ

一般に、while ループは、特定のステートメントのセットを何回繰り返す必要があるか正確にわからない場合に使用されます。特定の設定条件が満たされるまで、ステートメントを繰り返します。 while ループを使用する構文は次のとおりです。

 while [ <test_condition> ]
do
    # commands to be executed while the condition is true
done

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

  • <test_condition> は、 すべての反復の前に、満たされているかどうかを確認するためにテストされる条件を指します。条件が満たされなくなると、ループ本体には入らずにループが終了します。
  • do は、 繰り返し実行する必要があるステートメントを含むループ本体の開始を示します。
  • 「done」は ループの終わりを示します。

たとえば、1 から 5 までのすべての整数を出力するには、次のようにします。

 i=1
while [ $i -le 5 ]
do
    echo "$i"
    i=$((i + 1))
done
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

Linux で Bash スクリプトを作成する方法

Linux での bash スクリプトの基本的な構成要素については理解できたので、次は Linux システム用の bash スクリプトの作成方法に進みます。

ステップ 1: 新しいファイルを作成する

Linux で使用できる主要なテキスト エディターのいずれかを使用して、新しいファイルを作成できます。スクリプト ファイルの拡張子は必ず .sh にしてください。たとえば、nano テキスト エディタで「test.sh」という名前のテストを作成します。

 nano test.sh

ステップ 2: シバン ラインを定義する

シバン行は、bash スクリプトの実行に使用するインタープリターへのパスを定義します。これはすべての bash スクリプトの最初の行であり、一般的に次のように書かれます。

 #!/bin/bash

または

#!/bin/sh

スクリプトに他のインタープリターを使用する必要がある場合は、次の構文を使用します。

 #!/usr/bin/env <interpreter>

: 作成するすべての bash スクリプトにコメントを追加することは必須ではありませんが、コメントを追加するとコード全体の読みやすさが向上します。オクトソープ シンボルを使用して、スクリプトにコメントを追加します。ファイルが実行されると、すべてのコメントはインタープリタによって無視されます。

ステップ 3: コマンドとコードを追加する

これで、bash コンポーネントを使用して必要なコマンドと命令を追加し、すべてを論理的に組み合わせることができます。ディレクトリ内のすべての .txt ファイルを別のディレクトリに移動するプロセスを自動化する必要があるとします。次の bash スクリプトを使用して、すべての .txt ファイルを Linux システムの別のディレクトリに移動します。

 #!/bin/bash

# Create a directory to store text files
mkdir -p TextFiles

# Move all .txt files to the TextFiles directory
for file in *.txt
do
    if [ -f "$file" ]; then
        mv "$file" TextFiles/
        echo "Moved: $file to TextFiles/"
    fi
done

echo "File organization complete!"

複雑そうですか?それを部分に分けてみましょう:

  • #!/bin/bash はシバン行で、スクリプトが bash インタープリタで実行されることを指定します。
  • # Create a directory to store text files # Move all .txt files to the TextFiles directory
  • mkdir -p TextFiles 現在のディレクトリに「TextFile」という名前の新しいディレクトリが存在しない場合に作成します。
  • for file in *.txt for ループを使用してすべての .txt ファイルを反復処理します。
  • do ループの開始を意味します
  • if [ -f "$file" ]; then 現在のアイテムが通常のファイルかどうかを確認します
    • 上記の条件が満たされる場合、現在のファイルは mv "$file" TextFiles/ によって TextFiles ディレクトリに移動されます。
    • echo "Moved: $file to TextFiles/" ファイルが TextFiles ディレクトリに移動されたことを示すメッセージをコンソールに表示します
  • fi 、if ブロックが現在の反復で実行を終了したことを示します。
  • done 、for ループ ブロックの実行が終了したことを示します。
  • すべての txt ファイルが移動されると、 echo "File organization complete!" 最終メッセージがコンソールに表示されます。

ステップ 4: スクリプトを保存する

bash スクリプトの作業が終了したら、ファイルを保存してエディターを終了します。

ステップ 5: ファイルを実行可能にする

一般に、Linux ではすべてのスクリプト ファイルをすべてのタイプのユーザーが実行できるわけではありません。 bash スクリプトを実行可能にするには、次のコマンドを使用します。

 chmod +x <filename>

たとえば、ファイル test.sh を実行可能ファイルにするには、次のようにします。

 chmod +x test.sh

ステップ 6: ファイルを実行する

bash スクリプトを実行可能として作成したら、次の構文でファイルを実行します。

 ./<filename>

test.sh ファイルを実行するには:

 ./test.sh 
 Bash スクリプトとは何か、および Linux での書き方
Bash スクリプトとは何か、および Linux での書き方

絶対に観るべき!「 Bash スクリプトとは何か、および Linux での書き方」についてベスト動画選定

モテる!シェルスクリプト入門講座。シェルとは〜基本操作までを解説
【初心者向け】シェルスクリプト書き方編【前編】