この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るようになっているでしょう。
なので、是非最後まで読んで下さいね。
Shellスクリプト基礎知識(全11記事+1)
├─シェルスクリプトの基本事項!
├─変数と特殊変数について!
├─演算子「算術演算子」「比較演算子」について!
├─条件分岐「if」「case」について!
├─ループ処理「for」「while」について!
├─文字列置換「bash」「sed」について!
├─複数行のテキスト出力!ヒアドキュメントについて!
├─書式?戻り値?シェルスクリプト内の関数について!
├─シェルの組み込みコマンドについて!
├─クォートとは?コマンド置換とは?実現方法と内容の違いについて!
└─リダイレクトとは?標準入力・出力、標準エラー出力等について!
(補足)シェルスクリプトの設計書とは?必要な項目や書き方等を解説!
シェルスクリプトとは?
「シェルスクリプト」とは、カーネルに対して処理をさせたい命令をまとめた「プログラム」ファイルのことです。「Shell」はシェルスクリプトの上から順番に処理していきますので、サーバー管理のような単純な作業をまとめておくと自動化することができます。
シェルスクリプトは簡単な構文で記述できるため、プログラミング初心者にも親しみやすいという特徴があります。また、スクリプトはシンプルなテキストファイルで保存されるため、軽量で扱いやすく、多くの場面で活用されています。
- 繰り返し行うタスクの自動化(例: ファイルのバックアップやログの整理)
- 複雑な操作の簡略化(例: コマンドの一括実行)
- システム管理の効率化(例: サーバーの監視やメンテナンス)
シェルスクリプトで記述されたコマンドは、すべて終了ステータスを持ち、終了時の真偽によってその後の条件を判断します。
シェルスクリプトを記述するには、始めの1列目に「#!」から始まる「シェバン」「シバン」といわれる記述をしなければいけません。
#!/bin/bash
# カレントディレクトリのすべてのファイルを表示
echo "現在のディレクトリのファイル:"
ls -l
# ファイルサイズの合計を計算
echo "合計サイズ:"
du -sh
このように、シェルスクリプトを使うことで、複数のコマンドを一括して実行できるため、日々の作業を大幅に効率化することが可能です。
ココがポイント
シェバンは、必ずシェルスクリプトの第1行目に書きます。シェルスクリプトの頭に「#!」という文字列があると、それに続くコマンド(ここでは/bin/bash)が動作します。
つまり、シェルスクリプトを実行するときに使用するシェルを指定するということです。
シェルスクリプトを使うメリット
- 効率的な作業: 手作業で行う時間が削減され、エラーも防止できる。
- 柔軟性: 条件分岐やループ処理を利用して複雑なタスクを簡潔に記述可能。
- ポータビリティ: テキストファイル形式のため、他のシステムでも再利用が容易。
ちなみにKシェルを動かす場合なら「#!/bin/ksh」と記述します。同様に2行目からはスクリプト(コマンド)を羅列していきます。
シェルスクリプトの学習を始めるには、まず基本的なLinuxコマンド(例: ls、cd、echo)を理解することが重要です。その後、テキストエディタ(例: Vim、Nano、VSCode)を使用してスクリプトを作成し、ターミナルで実行することで実践的なスキルを習得できます。
初心者にとっては、最初は少し難しく感じるかもしれませんが、基本的なスクリプトを試すことで、その便利さや可能性をすぐに実感できるでしょう。シェルスクリプトは、ITエンジニアとしてのスキルを広げる第一歩として最適なツールです!
コメントの付け方「#」
シェルスクリプトを書いていると、あとで読み返しているときに、コードが何の処理をしているのが分からなくなってしまうことがよくあります。そのため、読み返したときにコードの説明をコメントアウトしておくことが大切です。
# 「#」で始まるこの行は、コメントとして解釈され実行対象にはなりません。
comand・・・
シェルスクリプトにコメントを書く場合、「#」を入力してからコメントを書いていきます。注意点として、「”」や「’」で囲んでいると文字列として扱われてしまいますから覚えておきましょう。
アドバイス
シェルスクリプトを記述するための書式をあらかじめ「ひな形(テンプレート)」化しておくことをお勧めします。また、シェルスクリプトは、改行位置やインデントなどを、かなり自由に書き込めます。特にこだわりがない場合は、インデント幅は空白2文字をお勧めします。
権限の設定
シェルスクリプトを書き終わったら、実行する前に権限の設定が必要になります。
下記のコマンドを入力して実行すると権限の設定は完了です。
chmod 755 <スクリプトファイル名>.sh
シェルスクリプトの実行
シェルスクリプトには、コマンドとして実行する以外に、「sh」の引数に指定して実行する方法など、いくつかの実行方法があります。
最もオーソドックスな実行方法は、「sh」の引数に実行したいシェルスクリプトを指定して実行する方法です。
sh <スクリプトファイル名>.sh
ココに注意
シェルスクリプトを実行させるためには、実行コマンドへ
「sh /<パス(所在)>/<シェルスクリプト名>」と入力します。
シェルスクリプト名だけを指定しても、シェルスクリプトの所在が分からないと実行エラーを起こします。
コマンドの終了ステータス
シェルスクリプトは、実行終了時にステータスコード(リターンコード)を返却します。
終了ステータス | 真偽値 |
0 | 真(true) |
0以外 | 偽(false) |
シェルスクリプトでは、各コマンドの終了ステータスが「0」なら「真(true)」、「0以外」なら「偽(false)」として扱われます。主な使用用途は、if文、while分、&&、||の条件判定に利用されます。
終了ステータスは、コマンドの実行直後に特殊パラメータ「$?」を参照することによって得ることが出来ます。また、シェルスクリプトの終了ステータスは、「exit」コマンドによって返却されます。
試しに「true」コマンド、「false」コマンドを使用して、確認してみましょう。
# trueコマンドの実行
$ true
$ echo $?
# falseコマンドの実行
$ false
$ echo $?
コンソールへ直接手入力して、終了ステータスコードを確認します。
1 2 3 4 5 6 | [root@CentOS7 ~]# true [root@CentOS7 ~]# echo $? 0 [root@CentOS7 ~]# false [root@CentOS7 ~]# echo $? 1 |
trueやfalseコマンドの直後に特殊パラメータ$?を参照すると、それぞれ「0」や「1」の値が表示されることがわかります。
シェルスクリプトを書くための準備
シェルスクリプトを始めるには、適切な環境を整えることが重要です。このセクションでは、初心者がスクリプトを書く際に必要な環境設定や、スクリプトを効率的に編集するためのエディタの選び方について解説します。
シェルスクリプトに必要な環境
シェルスクリプトを実行するためには、以下の環境が必要です。
- オペレーティングシステム: Linux、Unix、macOS(これらにはシェルがデフォルトでインストールされています)。WindowsでもWSL(Windows Subsystem for Linux)を使えば利用可能です。
- ターミナル: シェルコマンドを入力するインターフェースです。LinuxやmacOSでは標準搭載されています。Windowsの場合は、WSLやPowerShellを活用します。
- シェル: Bash、Zsh、Kshなどのシェル環境。Bashは最も一般的で、初心者にもおすすめです。
スクリプトを書くためのエディタ
シェルスクリプトを作成するには、コードを記述できるテキストエディタが必要です。以下に代表的なエディタとその特徴を挙げます。
ターミナルベースのエディタ
- Vim: 高機能で軽量なテキストエディタ。キーボード操作に慣れると効率的に作業が可能です。
- Nano: シンプルで初心者に優しいエディタ。基本的な操作が直感的に行えます。
- Emacs: 高度なカスタマイズが可能で、プログラミング向けのツールとして人気があります。
GUIベースのエディタ
- Visual Studio Code: Microsoftが提供する無料のコードエディタ。多くの拡張機能が利用可能で、初心者からプロまで幅広く支持されています。
- Sublime Text: 高速で軽量なテキストエディタ。見た目も美しく、使いやすいです。
- Atom: GitHubが提供するオープンソースのエディタ。シンプルでカスタマイズ性が高い。
スクリプトを書く前のセットアップ
シェルスクリプトを始めるための基本的なセットアップ手順を以下に説明します。
スクリプトファイルの作成
- ターミナルで新しいスクリプトファイルを作成します。1touch myscript.sh
- スクリプトファイルをエディタで開きます。1nano myscript.sh
- スクリプトを実行するには、ファイルに実行権限を付与する必要があります。1chmod +x myscript.sh
- 以下のコマンドでスクリプトを実行します。1sh /myscript.sh
- 行番号を表示: エディタで行番号を有効化すると、エラーの位置が特定しやすくなります。
- コード補完機能: Visual Studio Codeなど、コード補完機能を持つエディタを利用すると効率が向上します。
- 構文ハイライト: シェルスクリプト専用の構文ハイライトを有効にすることで、コードの可読性が向上します。
ひな形の活用
プログラム全般に言えることですが、人って「あるモノから間違いを見つける」のは得意ですが、「足りないものを見つける」のは苦手な生き物です。1~10まで作成時に考えるよりも、予め必要箇所をテンプレート化しておくだけで格段に労力が下がります。
そこでシェルスクリプトを作成する上で「ひな形(テンプレート)」を活用しましょう。予め、シェルスクリプトのひな型を用意しておくことで、「可読性」や「保守性」を高めるメリットがあります。
シェルスクリプトの作成には、下記のひな型を丸ごとコピーして、コンソールに貼り付けます。該当する箇所へシェルスクリプトを埋め込んでから、名前をつけて保存するだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/bin/sh #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ # # ver.1.0.0 yyyy.mm.dd # # Usage: # # sh <BASE_DIR>/template.sh # # Description: # 実行スクリプトテンプレート # # 設計書 # なし # #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ # ---------------------------------------------------------- # variables (変数の宣言領域) # ---------------------------------------------------------- scope="var" rc=2 # ---------------------------------------------------------- # functions (関数を記述する領域) # ---------------------------------------------------------- scope="func" # -------------------------------------------------- # devider. # -------------------------------------------------- # return N/A # -------------------------------------------------- line (){ echo -e "\\n ------------" echo -e " ▼ ${1}" } # ---------------------------------------------------------- # pre-process (事前処理ロジックを記述する領域) # ---------------------------------------------------------- scope="pre" # ---------------------------------------------------------- # main-process (メインロジックを記述する領域) # ---------------------------------------------------------- scope="main" if [ $? -eq 0 ]; then rc=0 fi # ---------------------------------------------------------- # post-process (事後処理ロジックを記述する領域) # ---------------------------------------------------------- scope="post" exit $rc |
※ ファイルを編集する場合、LinuxなどのUNIX系OSでは、テキストファイルの改行コードは標準でLFのみになるため、とくに気にする必要はありませんが、Windowsでテキストファイルを編集する場合、標準の改行コードがCR+LFになってしまうため、注意してください。