複数回実行する必要がある場合は、自動化してください!
Linuxで1つのタスクを何度も繰り返すことに気付くことがよくあります。ディレクトリの単純なバックアップの場合もあれば、一時ファイルのクリーンアップの場合もあれば、データベースのクローンを作成する場合もあります。
タスクの自動化は、bashスクリプトの力を活用できる多くの便利なシナリオの1つです。
簡単なbashシェルスクリプトを作成する方法、bashスクリプトを実行する方法、およびシェルスクリプトについて知っておくべきことを紹介します。
まず、すべてのbashスクリプトをホストするscriptsという名前の新しいディレクトリを作成しましょう。
mkdir scripts
cd scripts
この「scriptsディレクトリ」内で、catコマンドを使用してhello.shという名前の新しいファイルを作成します。
cat > hello.sh
ターミナルに入力して、次の行を挿入します。
echo 'Hello, World!'
Ctrl + Dを押してテキストをファイルに保存し、catコマンドを終了します。
Vim、Emacs、Nanoなどのターミナルベースのテキストエディタを使用することもできます。デスクトップLinuxを使用している場合は、Geditなどのグラフィカルテキストエディタを使用して、このファイルにテキストを追加することもできます。
つまり、基本的には、echoコマンドを使用して「HelloWorld」を出力しています。このコマンドはターミナルで直接使用できますが、このテストでは、シェルスクリプトを介してこのコマンドを実行します。
次に、次のようにchmodコマンドを使用して、ファイルhello.shを実行可能にします。
chmod u+x hello.sh
最後に、hello.shの前に目的のシェル「bash」を付けて、最初のシェルスクリプトを実行します。
bash hello.sh
Hello, World!
が表示されます 画面に印刷されます。これはおそらく、これまでに作成した中で最も簡単なHelloWorldプログラムでしたね。
上記で見たすべての手順のスクリーンショットは次のとおりです。
混乱している?まだ混乱しないでください。説明します。
「Bourne-Againshell」の略であるBashは、Linuxで利用可能な多くのシェルの1つのタイプにすぎません。
シェルは、コマンドを受け入れて実行するコマンドラインインタープリターです。これまでにLinuxコマンドを実行したことがある場合は、シェルを使用したことがあります。 Linuxでターミナルを開くと、システムのデフォルトのシェルがすでに実行されています。
ほとんどのLinuxディストリビューションでは、Bashがデフォルトのシェルであることがよくあります。これが、bashがシェルと同義であることが多い理由です。
シェルスクリプトの構文はほとんど同じですが、異なる場合もあります。たとえば、配列インデックスは、bashでは0ではなく、Zshでは1から始まります。 Zshシェル用に作成されたスクリプトは、配列がある場合、bashでも同じようには機能しません。
不愉快な驚きを避けるために、シェルスクリプトがbashシェル用に書かれていることをインタプリタに伝える必要があります。どうやってそれをしますか?あなたはシバンを使います!
「#!/ bin / bash」という行はシバン行と呼ばれ、一部の文献では、ハッシュバン行と呼ばれています。これは、ハッシュ「#」とバング「!」の2文字で始まるためです。
#! /bin/bash
echo 'Hello, World!'
スクリプトの最上部に「#!/ bin / bash」という行を含めると、システムは、スクリプトのインタープリターとしてbashを使用することを認識します。したがって、hello.shスクリプトの前にbashを付けることなく、直接hello.shスクリプトを実行できます。
シェルスクリプトをPATHに追加します(任意のディレクトリから実行できます)
スクリプトの実行に./hello.shを使用したことに気付いたかもしれません。先頭の./
を省略すると、エラーが発生します[email protected]:~/scripts$ hello.sh
hello.sh: command not found
Bashは、hello.shという名前のコマンドを実行しようとしていると考えました。端末でコマンドを実行するとき。シェルは、PATH変数に格納されている一連のディレクトリでそのコマンドを探します。
echoを使用して、そのPATH変数の内容を表示できます。
echo $PATH
/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
コロン文字(:)は、コマンドを実行するたびにシェルがスキャンする各ディレクトリのパスを区切ります。
echo、catなどのLinuxコマンドは、実行可能ファイルがbinディレクトリに保存されているため、どこからでも実行できます。 binディレクトリはPATHに含まれています。コマンドを実行すると、システムはPATHをチェックして、そのコマンドの実行可能ファイルを見つけるために検索する必要のあるすべての場所を探します。
通常のLinuxコマンドのように、どこからでもbashスクリプトを実行する場合は、シェルスクリプトの場所をPATH変数に追加します。
まず、スクリプトのディレクトリの場所を取得し(同じディレクトリにいると仮定して)、PWDコマンドを使用します。
pwd
exportコマンドを使用して、スクリプトディレクトリをPATH変数に追加します。
export PATH=$PATH:/home/user/scripts
PATH変数の最後に「scriptsディレクトリ」を追加したことに注意してください。カスタムパスが標準ディレクトリの後に検索されるようにします。
真実の瞬間はここにあります。 hello.shを実行します:
[email protected]:~/scripts$ hello.sh
Hello, World!
できます!これで、このチュートリアルは終了です。シェルスクリプトについての基本的な考え方がわかったことを願っています。以下のPDFをダウンロードして、いくつかのサンプルスクリプトの課題で学んだことを実践できます。ヒントが必要な場合に備えて、それらのソリューションも提供されています。
Bash第1章練習問題この章で学んだことを練習するための問題とその解決策Bash-Chapter-1-Practice-Questions-Linux-Handbook.pdf26KB
PATH変数を紹介したので、シェル変数について詳しく説明する次のbashスクリプトチュートリアルにご期待ください。