これからLinuxを学ぶ方に向けてシェルスクリプトとは何なのか、使用方法や実行方法のほか、環境設定を解説にくわえ、学習方法も紹介します。
シェルスクリプトを初めて見た方は、プログラムの中に「Linux」のコマンドが書かれていて難しそうな印象を受けるのではないでしょうか。しかし、シェルスクリプトは、開発現場の定期的な処理の自動化によく使われる便利なものです。ぜひ、仕組みや操作方法を覚えて使えるようになりましょう。
今回は、これから「Linux」を学ぶ方に向けてシェルスクリプトとは何かについて解説します。
目次
シェルスクリプトとは、OSを操作させるための簡単なプログラミング言語です。「Linux」では、ターミナルにコマンドを打ち込んで操作するのが基本のスタイルです。とはいえ、長いコマンドを毎回打ち込むのは、手間と感じる方もいるかもしれません。
シェルスクリプトを活用することで、シェルで実行できるコマンドをプログラム入力のよう実行できる仕組みです。
シェルスクリプトを理解するには、シェルとカーネルの関係を理解しなければなりません。まずは、シェルとカーネルの関係、そして「Linux」でよく使われるシェルを紹介します。
「Linux」はOSに当たるカーネルと、そのカーネルを人が操作するためのシェルで構成されています。つまり、シェルとは人が入力したコマンドをカーネルに渡し、その結果を表示するスクリプトです。
シェルにはプログラミング言語のような機能が組み込まれており、それを「Linux」のコマンドと組み合わせることにより、まるでプログラムを構築するように動作を指示できます。また、シェルで実行できるコマンドを記述したテキストファイルをシェルスクリプトといいます。
「Linux」のカーネルとは、プログラムを実行し、ファイルの入出力やキーボード、マウス、ディスプレイの入出力などを担当するOSの中核部分です。OSの中核部分であるカーネルを囲み、人が操作できる機能がシェルにあたります。
そもそも「Linux」は、リーナス・トーバルズさんが中心となり、「UNIX」と同じ機能を実現するために開発されたOSです。ただし、彼が開発したのは「Linux」のカーネルだったため、「UNIX」用に使われていたシェルが「Linux」に移植されてきました。そのため、シェルは好みに合わせてカーネルの切り替えが可能です。
「Linux」は多くの機能を「UNIX」から引き継いでおり、その1つが今回紹介するシェルスクリプトです。「UNIX」が登場したのは1963年と古く、さまざまなシェルが使われていました。そして、UNIX用に作られたシェルのいくつかは今でもLinuxなどで利用できます。
そのようなLinuxでよく使われるシェルが次の4つです。
ここからは、Linuxでよく使われるシェルをそれぞれ詳しくみていきます。
「Bourne Shell」は、初期の「UNIX」に標準で搭載されていたシンプルな機能のシェルです。人が操作するシェルの他にシェルスクリプト用として使われることが多く、OSが起動する際の処理もシェルスクリプトが使われていました。
なお今の「Linux」では、かつて使われていた「Bourne Shell」は使われていません。しかし、今の「Linux」でも「Bourne Shell」の機能を引き継いだPOSIX準拠シェルが「/bin/sh」で利用できます。
「UNIX」にはSystemV系とBSD系の2系統あり、BSD系UNIXで標準だったシェルが「C Shell」です。そして「/bin/csh」で使えます。先ほどの紹介した「Bourne Shell」よりも操作しやすく、C言語に近い文法でシェルスクリプトを書ける点がメリットでした。
なお「C Shell」は以前人気のあったSun Microsystem社製の「UNIX」で標準だったシェルです。そのためSolarisで作られたシェルスクリプトを使うケースでは、「Linux」でも「C Shell」が使われます。
「Z Shell」は、UNIX向けに作られた「Bourne Shell」と「C Shell」の良い点を取り入れたシェルです。公開されたのは1990年でその後長く改良が続けられており、最近のmacOSのターミナルに採用されています。
コマンドは「/bin/zsh」です。「Linux」でも使えますが、もしMacBookでシェルスクリプトを使うなら、Z Shellによるシェルスクリプトの作り方を学ぶのがおすすめです。
「Bash」は、RHELやUbuntuなど、幅広いLinuxディストリビューションで採用されている標準のシェルです。比較的新しいシェルで、「Bourne Shell」や「C Shell」の良い点を取り込み、さらに便利な機能が追加されています。
なおコマンドは「/bin/bash」で、「Bourne Shell」を拡張したシェルスクリプトが記述できます。これから「Linux」を学ぶ方は、「Bash」の使い方を学んでください。
シェルスクリプトが使える場面は、毎回同じコマンドをいくつも実行するケースや、間違いが許されないケースです。また、シェルスクリプトでは繰り返しや条件分岐も可能で、コマンドの実行結果を記録に残す処理にも使えます。
代表的なシェルスクリプトを使う場面は次の3つです。
ここからはシェルスクリプトを使う場面ごとに、それぞれ詳しくみていきましょう。
シェルスクリプトは「作業の自動化」がしたい場面で活用されます。もし、いつも同じコマンドを何度も打ち込んでいるのであれば、シェルスクリプトに記述することで作業を自動化できます。
また開始時刻を決めて自動実行する場合でもシェルスクリプトを使うことが可能です。たとえば、定期的にOSの操作を行いたいときには、シェルスクリプトでコマンドを入力することにより、自動的に作業を行えます。
シェルスクリプトの実行結果をファイルに書き込むように作っておくことで、作業の記録が可能です。この場合、シェルで可能なリダイレクト機能により、コマンドの実行結果をファイルに書き込む処理をシェルスクリプトに記述します。
なおシェルによる手作業での処理が必要な場合は、Linuxコマンドの「script」を使うことで入力コマンドとその実行結果を記録できます。重要な処理ではシェルスクリプトと「script」コマンドをうまく活用してください。
シェルスクリプトを使い慣れている方は、その場でシェルスクリプトを書いて実行できます。Linuxのコマンドの中には複数のオプションが必要なケースもあるため、シェルスクリプトに記述することで、複数のコマンドをまとめてチェックしてから実行できるのです。
Linuxの作業効率をあげるためにも、シェルスクリプトを使いこなすことが大切です。
シェルスクリプトを使う場合、記述したテキストファイルに実行権限を設定すればコマンドと同じように実行します。なおシェルスクリプトは、実行したいLinuxのコマンドを記述するだけでも使えますが、変数と繰り返し構文や条件分岐構文を組み合わせ、まるでプログラムのような書き方も可能です。
ここからは、具体的なシェルスクリプトの書き方について解説します。
シェルスクリプトはテキストファイルにLinuxのコマンドを記述するだけで実行できますが、下記2つの基本的なルールは重要となるため覚えておきましょう。
たとえば、bashのスクリプトを記述する場合、次のように記述します。
なお、上述の1行目の記述を省略した場合は、そのシェルスクリプトの実行に使っているシェルで実行されます。そして、今使っているシェルと違うシェルを1行目で指定すれば、指定されたシェル用のシェルスクリプトとして実行されます。
シェルでは変数が利用できます。たとえば、作業の途中で作成した長いファイル名を変数にセットしておけば、その変数をファイル名代わりに使うことが可能です。
なおbashの場合、「数=”代入したい文字列”」で変数にセットできます。また、変数を使う場合は、「$」を変数名に付けてください。
bashで変数を使う操作例
このシェルの変数は、シェルスクリプトの中でも利用できます。また、シェルにあらかじめ用意された変数もあります。このようなあらかじめ用意された変数も活用してスクリプトを組んでください。
シェルスクリプトでは、プログラミング言語のような条件分岐構文としてif文とcase文を利用できます。if文は指定された条件に「一致した場合」と「一致しない場合」とで、処理を分岐する構文です。
if文の構文
if [ 条件 ]; then 条件に一致した場合の処理 else 条件に一致しない場合の処理 fi
またcase文は検査対象が幾つかの候補の中から一致するものを探し出し、見つかった場合には、それに対応する処理に分岐する構文です。
case文の構文
case 検査対象 in 候補1) 候補1の処理;; 候補2) 候補2の処理;; 候補2) 候補2の処理;; esac
たとえばif文に先ほどの変数を組み合わせることで、コマンドの結果に応じて処理を分岐するシェルスクリプトを作れます。この場合、コマンドの結果がシェルの変数「$?」に格納されるので、この値を使います。
#!/bin/bash LOG1="/log/access_log_202209011030.txt" ls $LOG1 if [ $? == 0 ]; then echo "コマンド成功" else echo "コマンド失敗" fi
なお、ファイルがあるかどうかをチェックする場合、if文の条件式に「-f」が使えるので、上の例は下記のようにも記述できます。
#!/bin/bash LOG1="/log/access_log_202209011030.txt" if [ -f $LOG1 ]; then echo "ファイルあり" else echo "ファイルなし" fi
bashのシェルスクリプトでは、繰り返し処理を実行するためにfor文とwhile文を利用します。なおfor文は繰り返し回数が決まっている場合、while文は繰り返し回数が決まっていない場合に使う構文で、while文にはループを中断する処理が必要です。
for文の構文 for 数え変数 in {1..処理回数}; do 繰り返す処理 done while文の構文 while : do 繰り返し処理 done
for文の繰り返し処理は数字の範囲だけでなく、リストを1つずつ処理するケースでも使えます。たとえば、lsコマンドでファイル一覧を取得して、そのファイルすべてに同じ処理を適用するといった処理も可能です。
ファイル一覧を使って処理する例
#!/bin/bash files=(`ls -1 /log/access_log_2022*`) for file_name in "${files[@]}"; do echo ${file_name} done
シェルスクリプトを作っただけでは、ただのテキストファイルなので実行できません。シェルスクリプトをシェルの引数に指定するか、Linuxのコマンドなどを記述したテキストファイルに実行権限を設定して実行します。
次からこの2つの実行方法について紹介します。
権限を付与せずに実行する場合、シェルスクリプトのファイルをシェルの引数にして実行します。
たとえば、bashで実行権限を付与せずにシェルスクリプト「script.sh」を実行する方法は次のとおりです。
テキストファイルのシェルスクリプトに実行する権限を付与することで、Linuxのコマンドと同じように実行できます。この場合、1行目に記載されたシェルのシェルスクリプトとして実行されるので、注意してください。
ファイルに実行する権限を付与するコマンドは「chmod」です。たとえばvimエディタでシェルスクリプトを作成し、作成したファイルに実行する権限を付与することにより、パスを指定して実行する手順は次のとおりです。
シェルスクリプトに権限を付与して実行する例
$ vim script.sh
$ chmod +x script.sh
$ ./script.sh
シェルスクリプトが使えるのは「Linux」だけではなく、macOSのターミナルでも、利用可能です。さらに、Windowsでも使えますが、Windowsで使う場合はシェルを利用するための環境を設定してください。
たとえば、Windows 11でシェルを利用するには、Windows 11のWSLで「Linux」をインストールし、アプリケーションのように「Linux」を起動してシェルを使います。この設定手順は次のとおりです。
シェルスクリプトは、日本語の書籍や学習サイトなど情報が多く、文法も簡単なことから比較的独学でも学びやすいプログラミング言語です。さらに学習サイトの中には、Webブラウザからシェルが使えるサイトもあるので、ぜひ活用してください。
次からは、おすすめのシェルスクリプトの勉強ができるサイトを紹介します。
「ドットインストール」は3分程度の短い動画による学習スタイルが特徴のプログラミング学習サイトで、学習コンテンツにシェルスクリプト入門講座があります。「ドットインストール」で見られる動画は初心者でもわかりやすく、動画を見ながらコーディングすることでスキルを身につけることが可能です。
「paizaラーニング」は、Webブラウザでプログラムを組んで実行しながら学べるのが特徴の学習サイトです。具体的には動画エリアとコードエリアがあり、動画エリアでは動画を用いて学習し、コードエリアで学んだコードを動かします。
シェルスクリプトに関してはLinux入門編の中で扱っているので、Linuxのコマンドの使い方と共に学んでください。
「Udemy」は各分野の専門家が講師となって作成した動画を販売する学習サイトです。初心者向けのわかりやすい動画からプロ向けの専門的な動画など、多くの動画が登録されているため、自分のレベルに合わせてスキルを学べます。
シェルスクリプトは、Linuxのコマンドの組み合わせを簡単に実行できる便利な仕組みです。仕事でLinuxを使う方は、ぜひサンプルコードを書きながらシェルスクリプトの使い方を身につけてください。
シェルスクリプトもプログラミング言語の一種です。そのため、実行時にエラーが出ることもありますが、エラーを解決することでスキルアップしていけます。そしてシェルスクリプトの使い方を解説した書籍や学習サイトも多くあるので、ぜひ活用してください。
2024.06.17
子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介
#プログラミングスクール
2022.01.06
【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説
#プログラミングスクール
2024.01.26
【未経験でも転職可】30代におすすめプログラミングスクール8選!
#プログラミングスクール
2024.01.26
初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説
#JAVA
2024.01.26
忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説
#プログラミングスクール
2022.01.06
【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介
#プログラミングスクール
2024.01.26
【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説
#プログラミングスクール
2024.01.26
【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説
#プログラミングスクール
2024.01.26
【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説
#プログラミングスクール