パソナについて
記事検索

【ソースコード有】シェルスクリプト入門 - 構文や書き方、使い方について解説

基本文法から実行方法まで解説し、併せてWindowsでシェルスクリプトを利用する方法について解説します。

【ソースコード有】シェルスクリプト入門 - 構文や書き方、使い方について解説

基本文法から実行方法まで解説し、併せてWindowsでシェルスクリプトを利用する方法について解説します。

スキルアップ

2023/02/27 UP

LinuxやUnix系のOSを利用する上で重要なシェルスクリプトですが、慣れていない方から見ると呪文のようで難しいと感じてしまうかもしれません。しかし、実際には基本的な文法さえ覚えてしまえば難しいものではないとわかるでしょう。

この記事では、基本文法から実行方法まで解説し、併せてWindowsでシェルスクリプトを利用する方法について解説します。

【シェルスクリプト入門】概要

シェルスクリプトは、LinuxやUnixなどでユーザー操作を受け付け、動作した結果を出力するシェルをまとめたものです。シェルはOSを構成するソフトウェアの一つであり、操作の受付や他のソフトウェアに指示を出したりする役割を担います。

LinuxやUnixを操作する際には、操作コマンドを一つひとつ入力しても問題ありませんが、複雑な処理や繰り返し処理を実行する場合には非常に手間がかかります。そこで、シェルをひとまとめにし、効率的に処理を実行するためにシェルスクリプトが用いられるのです。

シェルスクリプトを使えば、LinuxやUnixでの定例作業の自動化や、サーバーソフトウェアの操作などが行なえます。詳しくは“シェルスクリプトとは?使用例やできること、使うための方法” で解説していますので、こちらをご覧ください。

【シェルスクリプト入門】基本文法と書き方

【シェルスクリプト入門】基本文法と書き方

ここからは、具体的なシェルスクリプトの書き方について解説していきます。シェルスクリプトを理解するする上では、基本文法・変数・条件分岐・ループ処理をおさえておけば問題ありません。

基本文法と変数

シェルスクリプトはファイルに記載するものであり、LinuxやUnixではviなどのエディタを使って記述します。シェルスクリプトの1行目には“#!/bin/bash”のようなシバン(shebang)と呼ばれる文字列が必要です。

シバンはこのシェルスクリプトがどのシェルによって解釈・実行されるかを宣言するためのものであり、上記の例ではbashによって解釈・実行されることを宣言しています。基本的には上記のまま記載できますが、場合によってはシェルの保存場所が異なることも考えられるため、確認した上で記載しましょう。シェルの種類についても“シェルスクリプトとは?使用例やできること、使うための方法” で解説していますので、気になる方はこちらをご覧ください。

シバンを記載した後は、普段コマンドライン上で入力するコマンドをそのまま記載します。原則上から下に向かって順番に実行されるため、実行したい順番にコマンドを記載していきましょう。

        
#!/bin/bash

ls -l ./

touch newfile

ls -l ./

上記の例のシェルスクリプトでは、lsコマンドでディレクトリ内を確認し、touchコマンドで新規にファイルを作成、再度lsコマンドでディレクトリを確認するものとなっています。

簡単なシェルスクリプトであれば、普段実行するコマンドを順番に記載するだけでよいため、手順書を作成するようなイメージで記載していくとよいでしょう。

また、シェルスクリプトでは変数を利用できます。変数を利用すればより自由度の高いシェルスクリプトを作成することが可能です。変数は“変数名=値”の形で記載し、“$変数名”で呼び出せます。

        
#!/bin/bash

STR="Hello World"

echo $STR

上記の例を実行すると“Hello World”が出力されます。その他にも、シェルスクリプトを利用する上で頻繁に登場する特殊変数について以下にまとめました。

特殊変数 内容
$? 直前のコマンドの実行結果(0/1)
$# シェルスクリプト実行時の引数の数
$0 シェルスクリプトのファイル名
$1,$2,$3 ... シェルスクリプトのn番目の引数の値
$* または $@ シェルスクリプト実行時のすべての引数の値

ここまでをシェルスクリプトの基本文法として覚えておきましょう。

条件分岐(if文、case文)

シェルスクリプトで条件分岐を行ないたい場合には、if文やcase文を使用します。例えば、入力された値に応じて出力結果を変えたい場合には、次のようなシェルスクリプトが作成できます。

・if文の例

        
#!/bin/bash

read INT

if [ $INT -eq 0 ]; then
    echo "INT equal 0"
else
    echo "INT not equal 0"
fi

・case文の例

        
#!/bin/bash

read STR

case "$STR" in
    "a") echo "action 1";;
    "b") echo "action 2";;
    "c") echo "action 3";;
    *) echo "other action";;
esac

if文では条件式にしたがって真偽を判定して条件分岐を実現します。case文は入力された内容などから該当する処理に分岐を行なえます。通常の条件分岐ではif文が使われることが多く、ループする中で特定の文字入力があった場合にスクリプトを終了する、といった判定にcase文が使われることが多いといえるでしょう。

ループ処理(for文、while文)

ループ処理(繰り返し処理)では、for文やwhile文がよく利用されます。

・for文の例

        
#!/bin/bash

num=1

for i in $*
do
    echo var$num=$i
    num=$(($num+1))
done

・while文の例

        
#!/bin/bash

while :
do
    echo "input strings"

    read var
    case "$var" in
        "quit") break ;;
        *) echo "next action" ;;
    esac
done

for文、while文などのループ処理は、条件式が真であり続ける限り繰り返し処理を実行します。おもにfor文は配列などの複数の変数をすべて処理するために利用され、while文はループし続ける無限ループを実装するために利用されることが多いといえるでしょう。

上記の例では、for文はシェルスクリプトの引数すべてを表示し終えるまでループします。while文は無限ループとなっており、case文と組み合わせて“quit”が入力されるまでループし続ける仕組みとなっています。

【シェルスクリプト入門】実行方法

【シェルスクリプト入門】実行方法

作成したシェルスクリプトを実行する方法としては、大きく2つの方法が挙げられます。

・実行権限を付与せず、bashコマンドなどで実行

・実行権限を付与してコマンドとして実行

実行権限とはファイルを実行するための権限であり、原則実行可能ファイルは実行権限を付与して実行します。しかし、実行権限を付与せずとも“bash ./script.sh”のような形で実行することは可能です。

bashではなく、shやcshなどを利用している場合には、“sh ./script.sh”や“csh ./script.sh”となります。

ファイルの拡張子で実行ファイルかどうかを見分けることは可能ですが、実行権限を付与して利用することがほとんどです。シェルスクリプトはcronや他のシェルスクリプトからも呼び出される作りにすることが多く、簡潔に記載するためにコマンドとして実行できるようにすることが多いといえるでしょう。

実行権限を付与する際には、chmodコマンドを利用します。

        
$ chmod +x script.sh
または
$ chmod 755 script.sh

LinuxやUnixにおけるファイルの権限は、実行・書き込み・読み取りに分かれており、それぞれ次のように表されます。

権限 アルファベット表記 数字表記
実行 x 1
書き込み w 2
読み取り r 4

ファイルの権限はlsコマンドで確認でき、“-rwxr-xr-x”や“755”のような形で記載されています。アルファベット表記の場合は表示されているアルファベットに該当する権限を持ち、数字表記の場合は合算した数値で判断可能です。

また、左から“所有者-所属グループ-その他ユーザー”を表します。つまり、“-rwxr-xr-x”や“755”のような権限の意味は、所有者は全権限を持ち、所属グループとその他ユーザーは読み取りと書き込みの権限を持つことを意味しています。

シェルスクリプトを実行する上では、基本的には実行権限があるかどうかを確認するだけで問題ありませんが、LinuxやUnixを利用する際には権限の理解も重要になるため、併せて覚えておくとよいでしょう。

Windowsでシェルスクリプトを使う方法

シェルスクリプトはLinuxやUnix系OSで利用されます。MacOSもUnix系OSに含まれるため、ターミナルからそのまま利用可能です。Windowsでは標準機能としてシェルスクリプトを利用することはできませんが、Windows Subsystem for Linux(WSL)を有効化することで利用できます。

Windowsでシェルスクリプトを作成・実行する練習として利用したい場合には、次の手順で有効化してください。

1.“Windowsキー+S”で検索窓を開き、“コントロールパネル”を検索して開く

2.“プログラム”または“プログラムと機能”を選択

3.“Windowsの機能の有効化または無効化”を選択

4.“Windows Subsystem for Linux”または“Linux用Windowsサブシステム”にチェックを入れ、OKボタンを選択

5.インストール後に再起動を実施

6.Microsoft Storeで“Ubuntu”などのLinuxディストリビューションをダウンロード

7.スタートメニューに追加されたプロンプトからシェルを実行する

Windowsパソコンしか持っていない場合には、WSLを使ってシェルスクリプトの学習を進めてみてはいかがでしょうか。

シェルスクリプトは意外に簡単!まずはサンプルを参考に試して見よう

LinuxやUnixを快適に利用するためには、シェルスクリプトは欠かせない要素です。シェルスクリプトを書けるかどうかは、サーバーに携わるエンジニアのスキルとしても非常に重要視されます。

一見難しく見えるシェルスクリプトですが、プログラミング言語に比べれば理解しやすいといえるでしょう。基本文法・変数・条件分岐・ループ処理さえ覚えてしまえば、ある程度のシェルスクリプトは簡単に書けてしまいます。

シェルスクリプトに興味がある方は、この記事を参考に学習を進めてみましょう。