Linuxでシェルスクリプトのデバッグモードを有効にする3つの方法
シェルスクリプトとは、一連のコマンドをファイルに保存したものです。ターミナルで毎回コマンドを1つずつ入力して実行する代わりに、システムユーザーはすべてのコマンドをファイルに保存しておき、そのファイルを繰り返し呼び出すことで同じ処理を何度でも再実行できます。
スクリプトを学び始めた頃や、スクリプト作成の初期段階では、数行程度の短いスクリプトから書き始めるのが一般的です。この段階では、実行結果を目視で確認し、意図したとおりに動作しているかチェックするだけで十分にデバッグできます。
しかし、システム設定の変更やネットワーク経由の重要なバックアップなど、数千行にも及ぶ大規模で高度なスクリプトを書くようになると、出力を見るだけではスクリプト内のバグを発見するのに不十分であることに気づくでしょう。
そこで本記事では、Linuxにおけるシェルスクリプトデバッグシリーズの第一弾として、シェルスクリプトのデバッグモードを有効にする方法を解説します。後続の記事では、さまざまなデバッグモードの種類とその使い方について詳しく説明していきます。
スクリプトの始まり:シバン(She-bang)とは
スクリプトは、その最初の行によって他のファイルと区別されます。先頭行には #!(シバン — ファイルの種類を定義する記述)とインタプリタへのパス名が含まれており、システムに対して「このファイルは指定されたプログラム(インタプリタ)によって解釈されるコマンドの集まりである」ことを伝えます。
以下は、スクリプトの種類ごとの「先頭行」の例です。
#!/bin/sh [sh スクリプト用] #!/bin/bash [bash スクリプト用] #!/usr/bin/perl [perl プログラム用] #!/bin/awk -f [awk スクリプト用]
注意: スクリプトが標準的なシステムコマンドのみで構成され、内部シェルディレクティブを一切含まない場合は、先頭行や #! を省略してもかまいません。
Linuxでシェルスクリプトを実行する方法
シェルスクリプトを呼び出す一般的な構文は次のとおりです。
$ script_name argument1 ... argumentN
もうひとつの方法として、スクリプトを実行するシェルを明示的に指定することもできます。
$ shell script_name argument1 ... argumentN
具体例は以下のとおりです。
$ /bin/bash script_name argument1 ... argumentN [bash スクリプトの場合] $ /bin/ksh script_name argument1 ... argumentN [ksh スクリプトの場合] $ /bin/sh script_name argument1 ... argumentN [sh スクリプトの場合]
また、以下のように #! を先頭行に持たず、基本的なシステムコマンドのみを含むスクリプトの場合は、
#標準的なシステムコマンドを含むスクリプト cd /home/$USER mkdir tmp echo "tmp directory created under /home/$USER"
実行権限を付与してから、次のように実行するだけです。
$ chmod +x script_name $ ./script_name
シェルスクリプトのデバッグモードを有効にする主なオプション
シェルスクリプトのデバッグには、主に以下の3つのオプションが用意されています。
-v(verbose の略)— シェルがスクリプトの各行を読み込みながらその内容を表示します。詳細表示モード(verbose モード)を有効にします。-n(noexec / no execution の略)— シェルにすべてのコマンドを読み込ませますが、実際には実行しません。このオプションは構文チェックモードを有効にします。-x(xtrace / execution trace の略)— コマンドが実行される際に、コマンドとその引数をすべてターミナルに表示します。このオプションはシェルトレースモードを有効にします。
これらのオプションを使ってデバッグモードを有効にする方法は、主に3つあります。
方法1:スクリプトの先頭行を変更する
1つ目の方法は、シェルスクリプトの先頭行を以下のように変更することです。これにより、スクリプト全体のデバッグが有効になります。
#!/bin/sh option(s)
上記の形式で、option には前述のデバッグオプションを1つ、または複数組み合わせて指定できます。
方法2:デバッグオプション付きでシェルを起動する
2つ目の方法は、以下のようにデバッグオプションを指定してシェルを起動するものです。この方法でもスクリプト全体のデバッグがオンになります。
$ shell option(s) script_name argument1 ... argumentN
例:
$ /bin/bash option(s) script_name argument1 ... argumentN
方法3:set シェル組み込みコマンドを使用する
3つ目の方法は、set 組み込みコマンドを使って、関数などスクリプトの特定のセクションだけをデバッグするものです。この方法の利点は、スクリプト内の任意の場所でデバッグを有効・無効にできることです。
デバッグモードを有効にするには、次の形式で set コマンドを使用します(option には任意のデバッグオプションを指定)。
$ set option
デバッグモードを有効にする場合:
$ set -option
デバッグモードを無効にする場合:
$ set +option
さらに、スクリプトの異なるセクションで複数のデバッグモードを有効にしていた場合、それらを一度にすべて無効化することもできます。
$ set -
まとめ
以上が、シェルスクリプトのデバッグモードを有効にする方法でした。おわかりのとおり、スクリプト全体をデバッグすることも、特定のセクションだけをデバッグすることも可能です。
このシリーズの次回以降の記事では、verbose モード、構文チェックモード、シェルトレースモードの各デバッグオプションの具体的な使い方を、実例とともに詳しく解説していきますので、ぜひお楽しみに。
本ガイドに関する質問やフィードバックがあれば、ぜひコメント欄でお知らせください。
-
USBデバッグモードとは?Androidで有効にする方法をわかりやすく解説
Androidユーザーが知っておくべき隠れた便利機能のひとつが「USBデバッグ」です。一般ユーザーにはあまり馴染みがないかもしれませんが、開発者にとっては欠かせない重要な機能です。まずは、USBデバッグの基本について詳しく見ていきましょう。 USBデバッグとは? アプリ開発者であれば、Androidスマートフォンの内部動作にアクセスし、高度なオプションを利用したいと考えるのは自然なことです。USBデバッグモードを有効にすると、USB接続を通じてこれらの操作が可能になり、Android SDK(Android Software Developer Kit)がインストールされたパソコンとの通信も行
-
Windows 11で休止状態(ハイバネーション)モードを有効にする3つの方法
休止状態(ハイバネーション)モードは、バッテリーの節約やシステムの消費電力を効率的に管理できる便利な機能です。Windowsで休止状態モードを有効にすると、PCはバックグラウンドのすべての動作や進行中の作業を一時停止し、後から作業を中断した箇所からすぐに再開できるようになります。休止状態に入ると、システムはアプリ、ドキュメント、ファイルなどのすべてのデータをRAMではなくハードドライブに保存します。 Windows 11のスタートメニューに休止状態のオプションが見当たらない? Windows 11で休止状態モードを有効にする方法がわからない? 実は、Windows 11では初期設定のままでは