Linuxでシェルスクリプトのデバッグモードを有効にする方法
スクリプトとは、ファイルに保存されたコマンドのリストです。端末でコマンドを一つずつ入力して実行する代わりに、システムユーザーはすべてのコマンドをファイルに保存し、そのファイルを繰り返し呼び出して何度もコマンドを再実行できます。
スクリプトを学ぶときやスクリプトを書く初期段階では、通常、数行のコマンドから成る小さなスクリプトを書くことから始めます。そして、そうしたスクリプトをデバッグする際には、出力を確認し、意図した通りに動作するかを確かめることだけを行います。
しかし、何千行ものコマンドを含む非常に長く高度なスクリプトを書くことを始めると、たとえばシステム設定を変更したり、ネットワーク上で重要なバックアップを実行したりするスクリプトなど、スクリプトの出力を確認するだけではスクリプト内のバグを見つけるには不十分であることに気付くでしょう。
したがって、このLinuxのシェルスクリプトデバッグシリーズでは、シェルスクリプトデバッグを有効にする方法を解説し、異なるシェルスクリプトデバッグモードについて説明し、次のシリーズでそれらをどのように使用するかを歩んでいきます。
スクリプトの始め方
スクリプトは、最初の行に #! (シェバン - ファイルタイプを定義する)と、インタープリタへのパス名が含まれていることで、他のファイルと区別されます。これにより、システムはそのファイルが指定されたプログラム(インタープリタ)によって解釈されるコマンドのコレクションであることを知らせます。
以下は異なる種類の脚本における「最初の一文」の例です。
#!/bin/sh [For sh scripting]
#!/bin/bash [For bash scripting]
#!/usr/bin/perl [For perl programming]
#!/bin/awk -f [For awk scripting]
注意: スクリプトが内部シェルディレクティブなしで標準のシステムコマンドのみで構成されている場合、最初の行または #! は省略しても構いません。
Linuxでシェルスクリプトを実行する方法
シェルスクリプトを呼び出すための従来の構文は次のとおりです。
$ script_name argument1 ... argumentN
別の可能な形式は、以下のようにスクリプトを実行するシェルを明確に指定することです。
$ shell script_name argument1 ... argumentN
例えば:
$ /bin/bash script_name argument1 ... argumentN [For bash scripting]
/bin/ksh script_name argument1 ... argumentN [For ksh scripting]
/bin/sh script_name argument1 ... argumentN [For sh scripting]
最初の行に #! がなく、以下のような基本的なシステムコマンドのみを含むスクリプトの場合:
#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"
単に実行可能にして、以下のように実行します:
chmod +x script_name
./script_name
シェルスクリプトのデバッグモードを有効にする方法
以下は主なシェルスクリプトデバッグオプションです:
-n(noexecまたは未実行の短縮形)– シェルにすべてのコマンドを読み込むよう指示しますが、それらを実行しません。このオプションは構文チェックモードを有効にします。-x(xtraceまたは実行トレースの短縮形) - シェルにコマンドとその引数を実行中にターミナルに表示するよう指示します。このオプションを使用すると、シェルのトレースモードが有効になります。
1. シェルスクリプトの最初の行を修正する
最初のメカニズムは、シェルスクリプトの最初の行を以下のように変更することで、スクリプト全体のデバッグを可能にします。
#!/bin/sh option(s)
上記の形式では、オプションは上記のデバッグオプションの1つまたは組み合わせである可能性があります。
2. デバッグオプションを使用してシェルを呼び出す
二つ目は、デバッグオプションを使ってシェルを呼び出すことで、この方法ではスクリプト全体のデバッグも有効になります。
$ shell option(s) script_name argument1 ... argumentN
例えば:
$ /bin/bash option(s) script_name argument1 ... argumentN
3. setシェル組み込みコマンドの使用
三番目の方法は、特定のシェルスクリプトのセクション、例えば関数をデバッグするために、setという組み込みコマンドを使用することです。このメカニズムは重要であり、シェルスクリプトの任意のセグメントでデバッグを有効にすることができます。
次のフォームでsetコマンドを使用してデバッグモードをオンにできます。オプションは、デバッグオプションのいずれかです。
$ set option
デバッグモードを有効にするには、次を使用します:
$ set -option
デバッグモードを無効にするには、次を使用します:
$ set +option
さらに、シェルスクリプトの異なるセグメントでいくつかのデバッグモードを有効にしている場合、それらを一度に次のように無効にすることができます:
$ set -
これでシェルスクリプトのデバッグモードを有効にすることに関しては一旦終わりです。見たように、全体のシェルスクリプトをデバッグすることも、スクリプトの特定のセクションをデバッグすることもできます。
このシリーズの次の2つのエピソードでは、シェルスクリプトのデバッグオプションを使用して、詳細情報を表示、構文チェック、および シェルトレースデバッグ モードの使用方法を例を挙げて説明します。
重要なのは、このガイドについての質問を忘れずに聞いたり、以下のコメントセクションを通じてフィードバックを提供したりしてください。それまで、Tecmintに接続を保ちましょう。