簡易的なプログラミング言語であるShell Script

プログラミングソースコードHTML


シェルに対してコマンドで命令を実行させることができるシェルスクリプトことShell Sctipt。

コマンドのみで操作する簡易的なプログラミング言語は、知識がないまま見ても意味がわかりません。

何をしているのか、どんな命令を実行させているのかといった部分が一切理解できないでしょう。

今回の記事ではそんなShell Scriptについて基礎的な部分から解説をしていきます。

また、SHell Scriptが持つ特徴や作成・実行の基本もチェックしていきましょう。

覚えておくと役に立つShell Scriptを書くときのテクニック・コツについても併せて紹介していきます。


Shell Scriptとは

ビッグデータサーバルーム


Shell ScriptはUNIX系で用いられる「簡易的なプログラミング言語」です。

OSを操作するための「シェル」上で実行ができるスクリプト言語ですが、基本的に1行ずつ順番に「対話」していかなければなりません。

命令を入力して、結果を待ち、また入力して…といったサイクルを繰り返していくことになりますが、これでは余計に時間がかかってしまいますね。


まとめて記述する

こういった順番が決まっている命令や定められた処理をテキストファイルなどにまとめて記載したものを「Shell Script(シェルスクリプト)」といいます。

定期的に自動で実行できるようにしておくなど、記述の仕方でとても便利に活用できるでしょう。


UNIX系で使用する

UNIX系で用いられるため、Windowsでは用いません。

Windowsではバッチファイルを利用することができます。


Shell Scriptの持つ特徴

サポートエンジニア


続いては、そんなShell Scriptの特徴に注目していきます。


Shell Scriptはシェルコマンドをそのまま利用できる

Shell Scriptはシェルで使うコマンドをそのまま使えます

そのため、シェルのコマンドについて深く理解している人であれば、すんなりと記述していくことができるでしょう。

これは利点ともいえる部分です。

シェルで得たテクニック、そしてシェルスクリプトで得たテクニックをそれぞれで活用することができるでしょう。


テキストファイルを使う

先ほど少しだけ触れましたが、シェルスクリプトは基本的にテキストファイルを用いることになります。

そして、コンパイルなどは不要です。

他のプログラミング言語と大きく異なる部分だといえるでしょう。

とはいえ、やはり「スクリプト言語」的な特徴を持っているといえるのではないでしょうか。

同じくスクリプト言語であるJavaScriptやPHPなどもコンパイルは不要なので、似ている部分・共通点があることが分かります。


OSを問わない

シェルスクリプトはあくまで「シェルコマンド」です。

そのため、OSを問わずシェル上で動作させることができます。

むしろシェルスクリプトでOSを判別するようなプログラムを組んでいる方もいるほど。

色々な可能性を秘めているプログラミング言語ともいえるでしょう。

簡易的とはいえど、様々なことが実現できます。


Shell Scriptの基本

インターネットセキュリティのコンセプトイメージ。


さて、それでは実際にShell Scriptを作成・実行する流れを解説していきます。


1行目でどのシェルを使うかを指定する

基本的にShell Scriptの1行目には「どのシェルを使うか」を記述しなければなりません。

例えば「#!/bin/bash」と記述すれば「bash」というシェルを利用することになります。

bashは広く浸透しているシェルで、多くのディストリビューションで標準となっているので覚えておきましょう。

また、bashの独自機能を使わない場合は「#!/bin/sh」という記述でも問題ありません。


echoコマンドで出力

文字を出力する際に利用するコマンドは「echo」です。

例えば「echo “Hello, World”」と記述すれば、出力結果として「Hello, World」が出力されます。


readコマンドで入力

何か任意の文字列などを入力したい際には「read」を利用します。

例えば、以下のシェルスクリプトを実行したとします。

  1. #!/bin/bash
  2. read sample
  3. echo “$sample”

このシェルスクリプトを実行すると「sample」への入力を受け付けてくれます。

任意の文字を入力すれば、その文字列が「echo」コマンドで返されるという処理です。

仮に「test」と入力したとすれば、実行結果も「test」が出力されます。


変数について

もちろん変数を宣言することも可能です。

半角英数字およびアンダースコアを利用できるので、基本的に他のプログラミング言語と遜色なく利用できるでしょう。


変数の代入時の注意点

また、注意点として代入時の「=」が挙げられます。

プログラミングをする上で、変数を宣言・代入する際に「=」前後にスペースを空ける方も多くいるでしょう。

例えば「a = 1」のようなイメージです。

しかし、シェルスクリプトでこれはできません。

必ず「=」の前後にスペースは空けずに「a=1」のように記述してください。

また、文字列も「a=”サンプル”」のように代入することができます。


コメントを記入したいとき

Shell Scriptでコメントアウトを利用したい際には「#」を使いましょう。

C言語やJavaでいうところの「//」に該当するため、行単位でコメントアウトすることが可能です。

シンプルかつ1文字で済むので慣れてしまえば楽にコメント機能を利用できるでしょう。


Shell Scriptを実行する方法

Linuxコード


では実際に、Shell Scriptを実行する方法を解説します。

まずはインターフェースを立ち上げなければなりません。

Windowsであれば「コマンドプロンプト」か「PowerShell」、Macであれば「ターミナル」を起動してください。

先ほどお伝えした通り、Windowsでは「バッチファイル」を利用することになります。

MacはUNIX系なので、今回お伝えしているシェルコマンドを利用してShell Scriptを構築しましょう。

どちらもテキストファイルを利用します。


Windowsの場合

Windowsの場合、以下の記述で「test」と出力するバッチファイルを作成できます。

  1. echo test
  2. pause

ファイル形式を「.bat」にするのを忘れないようにしましょう。

特に他の設定は不要で、そのまま実行できます。


Macの場合

Macの場合は今回紹介している通り1行目に定型文を記載する必要があります。

同じ「test」という出力結果が得られるShell Script(.commandファイル)をチェックしてみましょう。

  1. #!/bin/bash
  2. echo “test”
  3. exit 0

これで「test」という結果が得られます。

Macの場合は権限の関係でそのままでは実行できません。

そのため、先にターミナル上で権限の変更コマンドを実行する必要があります。

.commandファイルを作成したディレクトリまでターミナル上で移動したら「chmod +x .command(ファイル名を記載する)」というコマンドを実行してください。

これで、実行ができるようになります。


Shell Scriptを書くテクニック・注意点10選

Webデザイナー


それではここから、Shell Scriptを実際に書く際のコツ・テクニック的なものや注意点を10個紹介していきます。

Shell Scriptはシンプルだからこそ、ちょっとした工夫でコードの読みやすさや扱い方が激変するといえるでしょう。

そのためにも、ちょっとしたテクニックを知っておくだけでコーディング効率などが一気に改善できる可能性もできます。


「:(コロン)」を使う

案件 検索 PC 男性


コロンを利用すると、正常終了を返します。

つまり「0」を返してくれるため、様々なシチュエーションで活用することができるでしょう。

ファイルの初期化として利用することもできるでしょう。


変数をダブルクォーテーションで括る

エンジニア プログラミング


変数をダブルクォーテーションで括る意識は大切です。

仮に変数名が間違っていたり異なっていた場合、意図しない処理が行われてしまう可能性があるからです。

しかし、変数名を「””」で括っておけば「””」の部分でエラーが起こり、未然に防ぐことができるでしょう。


Shell Script内の相対パスは危険なことも

オレンジ地にラップトップ


シェルコマンドなどを実行する際や、HTMLファイルなどでは絶対パスではなく相対パスがよく用いられます

これは「今いるディレクトリ(カレントディレクトリ)から見た目的のファイルのディレクトリ」の表記方法。

対して、絶対パスはその名の通り「ファイルがどこにあるか」を明確に表すパスです。

Windowsのエクスプローラ画面でウィンドウ上部に見られます。

さて、ではどうしてShell Script内で相対パスが危険なことがあるかというと「Shell Scriptを実行した場所がカレントディレクトリになるから」です。

つまり、実行した状況によってカレントディレクトリが変わる可能性があります。

そのため、相対パスで記述していると本来意図したディレクトリではないファイルを参照・削除・作成してしまうかもしれません。

もちろん相対パスは絶対NGというわけではありませんが、基本的には絶対パスで記述した方が良いでしょう。


変数の初期化について

インフラエンジニア


変数を初期化する際に、Shell Scriptでちょっとした工夫ができます。

  1. b=${a:=0}

上記のように記述すると、aが未定義だった場合に、aにもbにも「0」を代入することができます。

また、一見同じように見える下記に変えてみましょう。

  1. b=${a:-0}

=の部分を-に変えただけですが、若干挙動が変わります。

上記のようにすることで、aが未定義だった際「bに0を代入」することができます。

aはそのままということになりますね。

うまく活用すれば、よりShell Scriptの幅が広がるでしょう。


Shell Scriptの特別なコマンド

デスクトップでコーディングする若い男性


Shell Scriptには特別な変数があります。

例えば「$0」はスクリプト名

$?で直前に実行したコマンドの終了値など、種類は様々です。

ぜひ適切に利用して、より効率的なShell Scriptを構築しましょう。


引数は使わない

カフェでラップトップPCを操作する女性


普通、プログラミングで引数を利用するのは当たり前のことです。

むしろ使わないと不便にすら感じるでしょう。

しかし、Shell Scriptで引数を使うのは推奨できません。

極力標準入出力を利用するようにしましょう。

もちろん、既にShell Scriptについて深く理解できている方であれば問題はないでしょう。


if then

ビジネスマンがタブPCを持っている


プログラミングでは当たり前の分岐処理、if文ですが、Shell Scriptにもif文は存在しています。

ifやelifなどで記述でき、非常にシンプルです。

  1. if [条件]
  2. then
  3. 処理内容
  4. elif [条件]
  5. then
  6. 処理内容
  7. else
  8. 処理内容
  9. fi

パッと見「elif」や「fi」など見慣れないものがあるかもしれませんが、シンプルであることに気が付くでしょう。

難しく考えすぎず、素直にif文を利用できます。


改行コードに注意

プログラミングする女性

alt="" width="1024" height="683" />

Shell ScriptはOSを問わず実行できるというのは、既にお伝えしました。

しかし、OSによって改行コードが異なるという点は注意しておきましょう。

Windowsで特に何も指定せずに作成したファイルをそのままLinuxなどで実行することはできずエラーになります。

注意が必要です。


「;(セミコロン)」を書かない

プログラムコードとキーボード

alt="" width="1024" height="683" />

プログラミング経験があるとつい書いてしまいがちなのが、行末の「;」です。

ないと違和感すら覚えてしまうという方もいらっしゃるかもしれませんが、Shell Scriptで「;(セミコロン)」は必要ありません

そのため、慣れるまで時間がかかる方もいるかもしれませんが必ず「;」は書かないように注意しましょう。


コメントを積極的に活用する

ビジネスマンの手元のクローズアップ


案外大切なのが「コメント」です。

この記事でも「#」を利用すればShell Scriptでコメントアウトできることをお伝えしました。

後から見返した際や、他の人がShell Scriptを見る際に分かりやすいよう、少し複雑な処理などには積極的にコメントを利用しましょう。

コマンドを書いている時には不要に感じるかもしれませんが、後になって「書いておけばよかった」となってからでは遅いです。

ぜひ積極的にコメントアウトを利用しましょう。


Shell Scriptは奥が深い

美しい10代の女性はラップトップPCでフリーランスとして働く


今回の記事ではShell Scriptについて注目・解説を行なってきました。

シンプルで簡易的なプログラミング言語といわれますが、かなり奥が深い分野でもあります。

シンプルだからこそ難しく、よく分からない記述の仕方などに直面することもあるでしょう。

そういった際にも諦めず理解できたとき、そのコマンドなどを扱えるようになったときには充実感や達成感を感じられるはずです。

Shell Scriptを使いこなせるようなエンジニアを目指していきましょう。