この記事では、シェルおよびシェルスクリプトの意味や、シェルスクリプトでできることや利用シーン、bashでのシェルスクリプト作成と実行について解説します。
シェルスクリプトは、シェルによって解釈・実行される一連の処理を記述したスクリプトです。
主にUnix環境やLinux環境で使用され、自動化・ショートカット・繰り返しなどの処理に使いやすく、作業を効率化できます。また、ソフトウェアの追加インストールが不要で手軽に利用できるため、システム管理者を中心に高頻度で利用されています。
この記事では、シェルおよびシェルスクリプトの意味や、シェルスクリプトでできることや利用シーン、bashでのシェルスクリプト作成と実行について解説します。
シェルスクリプト入門の前に理解したい「シェル」の意味
「シェル」とは、ユーザーからの操作を受け付け、操作通りに動作した結果を出力するプログラムです。
一度でもLinux環境やUnix環境に触れた経験がある人なら、lsコマンドやcdコマンドを画面で実行し、コンピュータから出力される結果を見たことがあるかもしれません。その処理を実行するプログラムが「シェル」です。
シェルは、ユーザーによって画面に入力されたコマンドを解釈し、「カーネル」に引き渡します。
「カーネル」とは、CPUやメモリ、ハードディスクなどのハードウェアとソフトウェアを仲介するプログラムのことです。OSの中核部分を担っています。
このカーネルが出力した処理結果をシェルに渡し、ユーザーがわかるように解釈して画面に表示するのです。
シェルにも「Bourneシェル」「cシェル」「Friendly Interactiveシェル(fish)」など複数の種類がありますが、Linuxにおいて現在一般的なシェルは「Bourne Againシェル(bash)」です。
bashは、Bourneシェルをベースに後発シェルの優れた点を取り入れて高機能化を図ったシェルです。次のような機能が使用できます。
- コマンドライン編集
- ジョブ制御
- コマンド履歴参照
- ディレクトリスタック
- $RANDOM変数
- コマンド置換機
- コマンド名/ファイル名自動補完
シェルスクリプトは、このシェルで用いられるスクリプト言語のことです。
\21万以上のオンラインコースから選べる!/
Udemyで講座を探すシェルスクリプトとは?何ができる?
シェルスクリプトとは、シェルによって解釈・実行される一連の処理を記述したスクリプト。狭義では、Unixシェルで用いられるスクリプト言語を指します。
「スクリプト(script)」は「台本」という意味で、コンピュータに実行させたい処理を記述してコンピュータを動かせます。
この台本をテキストデータで用意したものがシェルスクリプトです。コマンド・インタプリタとも呼ばれています。
「インタプリタ」は「通訳者」という意味です。コンピュータにおいては、命令を1つずつ解釈して実行するプログラムのことを指します。
シェルスクリプトは、CやJavaなどと比較して機能が貧弱なため、本格的なプログラミングには向いていません。しかしながら、繰り返し(for/while/until)や条件分岐(if/case)などの制御文、変数や配列、関数などの仕組みは一通り備えていて、様々なことに応用が効きます。
シェルスクリプトの使いどころは?
シェルスクリプトは、単純なコマンドと標準入出力、繰り返し(for/while/until)や条件分岐(if/case)を組み合わせて処理できる業務での利用に向いています。
具体的には、次のような業務です。
- 定期作業の自動化
- 作業の記録
- 複数コマンドをまとめて処理
まずは、これらの使いどころを一つずつみていきましょう。
作業の自動化
定期的に実行する決まった作業があれば、シェルスクリプトで代用できます。
例えば、あるディレクトリの中身を毎朝8時に全て消去する、決まったプログラムを毎日夜9時に再起動する、などの作業です。
シェルスクリプトの中には、シェルで使用できるコマンドを記述できます。シェル内にて実行できるコマンドの組み合わせであれば、ほぼシェルスクリプトで代用可能です。
作業の記録
入力コマンドと画面への出力結果を記録できる「script」というLinuxコマンドが使用できます。シェルスクリプト内で、このscriptコマンドを記述することにより、特定のフォルダへ作業ごとの作業ログファイルを出力することもできます。
日報や作業時間の記録などに役立つほか、何かトラブルが発生した際には、過去の作業ログを参照することができます。
複数のコマンドをまとめて処理する場合
シェルスクリプトの具体的な記載方法は後述しますが、シェルスクリプトは、特に何も考えずにコマンドを並べて記述するだけでも動作する点が魅力です。
単純であるもののミスが発生しやすい作業において、事前に作業用のコマンドを列挙したシェルスクリプトを作成しておけば、作業時にもそのプログラムを実行するだけで作業が完了します。これにより、作業時間短縮や作業ミスのリスクを減らすことに役立ちます。
シェルスクリプトを作成&実行してみよう
それでは、実際にシェルスクリプトを作成していきましょう。今回はUbuntu 19の環境で、「Hello World」と画面に出力するシェルスクリプトを作成します。
ファイル名は「hw.sh」とし、下記コマンドをホームディレクトリで実行してみましょう。
1 |
$ vi hw.sh |
すると、viエディタが立ち上がってきますので、「i」キーを押下し、以下の文章を1行目に入力しましょう。
1 |
echo “Hello World” |
入力が完了したら、「esc」キーを押下し、「:wq」と画面に入力して「Enter」キーを押下します。これで保存ができたはずです。
ここで「ls -la」コマンドを実行すると、「hw.sh」の実行権限は次の通りになっています。
1 |
-rw-r--r-- |
この場合、誰にも実行権限がない状態なので、実行権限を所有者に付加しましょう。
実行権限を所有者に付加するには、以下コマンドを実行しましょう。
1 |
$ chmod 744 hw.sh |
コマンド実行後、「ls -la」コマンドを実行すると、「hw.sh」の所有者に実行権限(x)がついているのを確認できます。
1 |
rwxr--r-- |
続いて、いよいよシェルを実行します。
今回は、次の3パターンで実行してみます。
いずれも同様に「Hello World」と画面に出力されます。
- bashコマンドで実行
1 |
$ bash /home/[ユーザー名]/hw.sh |
- コマンドとして直接実行
1 |
$ /home/[ユーザー名]/./hw.sh |
- PATHを通して実行
1 2 3 4 5 |
$ export PATH=$PATH: /home/[ユーザー名]/ $ cd /home $ bash hw.sh |
通常、プログラムを実行する際には、絶対パスを指定して実行する必要があります。
ここで、絶対パスではなく「PATHを通す」ことにより、そのPATH直下に存在するプログラムを、プログラム名だけで実行できるようになるのです。
しかし、OSを再起動すると、上記コマンドで設定したPATHの内容は消えてしまいます。永続的にPATHを設定したい場合は、対象ユーザーのホームディレクトリ直下にある「.bash_profile」と呼ばれるファイルに追記することが一般的です。
.bash_profileは、デフォルトで次のようなファイル内容になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH unset USERNAME |
この中で「PATH=$PATH:$HOME/bin」の後ろに新しいPATHを追記し、「PATH=$PATH:$HOME/bin:/home/[ユーザー名]/」としましょう。追記したら「esc」キーを押下し、「:wq」と入力して保存することも忘れずに。
すぐにPATHの設定内容を反映したい場合は、下記コマンドをホームディレクトリ直下で実行します。
1 |
$ source ~/.bash_profile |
シェルスクリプトでは変数を使用できる
シェルスクリプトでは、「変数」を使用できます。「変数」は、文字列や数値などのデータを記憶しておけるものです。演算や値の入出力などを組み合わせることで、様々な処理に使用できます。
変数を画面に出力したい場合は、「echo [変数名]」と記載すれば出力可能です。
また、「特殊変数」と呼ばれる変数も存在し、最初から値が設定されています。
主な特殊変数は、以下の通りです。
特殊変数名 | 設定値 |
$! | バックグラウンドで実行されたコマンドのプロセスID |
$? | 直前に実行したコマンドの終了ステータス |
$$ | コマンドのプロセスID |
$# | シェルスクリプト実行時の引数の数 |
$* もしくは $@ | シェルスクリプト実行時の全引数 |
$0 | シェルスクリプトのファイル名 |
$1, $2, $3…… | N個目の引数の値 |
シェルスクリプトは、CやJavaなどのプログラム言語と比較すると、できることが限られています。しかしながら、繰り返しや条件分岐など、基本的な機能は一通り備えているため、複数のコマンドを組み合わせた処理でも、十分実施できます。
ソフトウェアの追加インストールなどは必要ないため、手軽に扱える点も魅力です。
シェルスクリプトを活用し、作業を効率化していきましょう。
最新情報・キャンペーン情報発信中