ウェブサイト検索

Bash スクリプトからシェル スクリプトを実行する方法


Bash でシェル スクリプトを実行することは、Linux システムを使用する人にとって最も基本的で役立つスキルの 1 つです。シェル スクリプトを使用すると、反復的なタスクを自動化し、システム構成を管理し、数行のコードで複雑なワークフローを作成できます。初心者でも経験豊富なユーザーでも、これをマスターすれば時間と労力を節約できます。この記事では、Bash でシェル スクリプトを正常に実行するための各手順を説明し、理解を確実にするための詳細な手順を示します。

このチュートリアルでは次のことを学びます:

  • Bashでシェルスクリプトを作成する方法
  • シェルスクリプトの実行方法
  • スクリプトを実行するための権限を管理する方法
  • Bash であるスクリプトを別のスクリプトから実行する方法

Bash でシェル スクリプトを実行する手順

Bash でシェル スクリプトを実行するには、スクリプトを作成し、実行権限を割り当て、最後にターミナルでスクリプトを実行する必要があります。一歩ずつ進んでいきましょう。

  1. シェル スクリプトを作成する:
    Bash でシェル スクリプトを実行する最初のステップは、実際の bash スクリプト ファイルを作成することです。シェル スクリプトは基本的に、順番に実行される一連のコマンドを含むプレーン テキスト ファイルです。このファイルは、nanovim などのテキスト エディタを使用して作成できます。

    $ nano myscript.sh

    テキスト エディタを開いた後、スクリプトに必要なコマンドを記述できます。例えば:

    #!/bin/bash
    echo "Hello, World!"

    ファイルの先頭にある #!/bin/bash 行は、このスクリプトを Bash シェルを使用して実行する必要があることをオペレーティング システムに伝えます。 echo コマンドは、テキストを画面に出力します。

  2. スクリプトの作成が完了したら、保存してテキスト エディターを終了します。 nano を使用している場合は、CTRL+X を押してから、Y を押して保存を確認し、Enter を押して終了します。

  3. スクリプトを実行可能にする:
    スクリプトを実行する前に、スクリプトを実行可能にする必要があります。これにより、システムはそれを実行可能なプログラムとして認識します。 chmod コマンドを使用して、スクリプトの権限を変更します。

    $ chmod +x myscript.sh
  4. このコマンドはスクリプトに実行権限を付与し、システムによるスクリプトの実行を許可します。

  5. シェル スクリプトを実行します:
    スクリプトを実行可能にしたら、実行できるようになります。これを行うには、スクリプトが存在するディレクトリに移動し、次のように入力してスクリプトを実行します。

    $ ./myscript.sh
  6. ./ は、現在のディレクトリでスクリプトを探すように端末に指示します。スクリプトが実行され、ターミナルに出力 Hello, World! が表示されるはずです。

  7. Bash で別のスクリプトからスクリプトを実行する:
    場合によっては、Bash の別のスクリプト内から 1 つのスクリプトを実行する必要がある場合があります。これは、要件に応じて完全パスを指定するか、相対パスを使用することによって実行できます。

    • 相対パスの使用: 相対パスは、現在の作業ディレクトリ (スクリプトを実行しているディレクトリ) を基準としたスクリプトの場所を指します。相対パスを使用して別のスクリプトを実行する方法は次のとおりです。

      #!/bin/bash
      ./myscript.sh
      echo "Main script executed!"
    • この例では、./myscript.sh は、メイン スクリプトと同じディレクトリにあるスクリプトを指します。 ./ は現在のディレクトリを示すため、Bash は同じフォルダー内で myscript.sh を探すことができます。

    • フル パスの使用: フル パスまたは絶対パスは、ルート ディレクトリから始まるスクリプトの正確な場所を指定します。この方法は、実行するスクリプトが別のディレクトリにある場合、または現在のディレクトリに関係なくスクリプトを確実に実行したい場合に便利です。

      #!/bin/bash
      /home/user/scripts/myscript.sh
      echo "Main script executed!"
    • この場合、/home/user/scripts/myscript.sh は、スクリプトの正確な場所を指します。メイン スクリプトの場所に関係なく、常に /home/user/scripts/ にある another_script.sh が実行されます。

    相対パスと完全パスの違い:

    • 相対パス: 柔軟ですが、メイン スクリプトの実行元に依存します。これは、2 つのスクリプトが同じディレクトリ内、または予測可能な相対位置にある場合にのみ機能します。
    • フル パス: メイン スクリプトの実行元に関係なく、常に正しいスクリプトが実行されるようにします。これは、スクリプトが別のディレクトリに保存されている場合、または実行をより詳細に制御したい場合に最適です。

    適切な方法を選択することで、異なるディレクトリまたは環境間でのスクリプトの実行を簡単に管理できます。

  8. Bash コマンドを使用してスクリプトを実行する:
    あるいは、bash コマンドを使用してシェル スクリプトを実行可能にせずに実行することもできます。これは、ファイルのアクセス許可を変更したくない場合に便利です。

    $ bash myscript.sh

    このコマンドは、実行権限の必要性を回避し、Bash インタープリターを使用してスクリプトを直接実行します。

結論

これらの手順に従うことで、Bash でシェル スクリプトを簡単に作成、実行、管理できます。タスクを自動化する場合でも、ファイルを管理する場合でも、他のスクリプトからスクリプトを実行する場合でも、このスキルを習得すると、Linux システムでの生産性と効率が大幅に向上します。 Bash でシェル スクリプトを実行する方法を理解すると、自動化とシステム管理の無限の可能性が広がります。

よくある質問 :

1.シェル スクリプトを実行可能にするにはどうすればよいですか?

シェル スクリプトを実行可能にするには、次のコマンドを使用します。

$ chmod +x script_name.sh

これにより実行権限が付与され、スクリプトの実行が可能になります。

2.スクリプトの実行時によく発生するエラー「権限が拒否されました」 とは何ですか?

このエラーは、スクリプトに実行権限がない場合に発生します。 chmod +x コマンドを使用して、スクリプトを実行可能にします。

$ chmod +x script_name.sh

3. Bash でスクリプトを実行可能にせずに実行するにはどうすればよいですか?

Bash コマンドを使用してスクリプトを直接実行できます。

$ bash script_name.sh

4. 「そのようなファイルまたはディレクトリはありません」 とはどういう意味ですか?

このエラーは通常、指定されたパスにスクリプトが見つからないことを意味します。正しいディレクトリにいることを確認するか、スクリプトへのフルパスを使用してください。

$ ./script_name.sh

相対パスの場合は、次のような完全パスを使用します。

$ /home/user/script_name.sh

5. Bash で別のスクリプトからスクリプトを実行するにはどうすればよいですか?

相対パスまたは完全パスを使用してメイン スクリプト内で別のスクリプトを呼び出すことで、別のスクリプトを実行できます。

./another_script.sh

(相対的) または

/home/user/another_script.sh

(フルパス)。

6.スクリプト実行時の「コマンドが見つかりません」 とはどういう意味ですか?

このエラーは、Bash が現在のディレクトリでスクリプトを見つけることができないことを示します。スクリプトが現在のディレクトリにある場合は、スクリプト名の前に必ず ./ を含めてください。

$ ./script_name.sh

7. root ユーザーとしてスクリプトを実行できますか?

はい、sudo を使用すると、root 権限でスクリプトを実行できます。

$ sudo ./script_name.sh

これは、スクリプトでシステム ファイルを変更したり、管理タスクを実行したりする必要がある場合に必要です。

8. Bash スクリプトをデバッグするにはどうすればよいですか?

Bash スクリプトをデバッグするには、-x オプションを使用して実行できます。

$ bash -x script_name.sh

これにより、各コマンドが実行される前に出力され、エラーや予期しない動作を追跡するのに役立ちます。

関連記事: