シェルスクリプトをデバッグする方法

目次

スポンサードリンク

シェルスクリプトをデバッグする方法はいくつかあります。 echo コマンドでどこまで処理が実行されたか出力する方法もありますが、シェルを実行する際に -x オプションを使用すると簡単にデバッグすることができます。

サンプルコード

このシェルスクリプトは ループ処理内で変数idxの値を出力しながら、変数の値を1ずつ加算していき、条件に合致したら処理をループを終了するシンプルなスクリプトです。

#!/bin/bash

idx=0

while true
do
    sleep 1
    echo $idx
    idx=`expr $idx + 1`

    if [ $idx -eq 3 ]; then
        break;
    fi
done

exit 0

このシェルスクリプトを実行すると、以下のような結果になります。ループの回数分、変数idxの値が表示されます。

[root@133-130-122-109 tmp]# sh roop.sh
0
1
2

シェル実行時に -x オプションを指定する方法

-x オプションを付けて実行すると、以下のように各処理を実行するたびに処理内奥を画面に表示します。どのような順序で処理が実行されるのか、また、どこまで処理が実行されたのか確認することができます。シェルスクリプトを開発する際に役立つTipsですね。

[root@133-130-122-109 tmp]# sh -x roop.sh
+ idx=0
+ true
+ sleep 1
+ echo 0
0
++ expr 0 + 1
+ idx=1
+ '[' 1 -eq 3 ']'
+ true
+ sleep 1
+ echo 1
1
++ expr 1 + 1
+ idx=2
+ '[' 2 -eq 3 ']'
+ true
+ sleep 1
+ echo 2
2
++ expr 2 + 1
+ idx=3
+ '[' 3 -eq 3 ']'
+ break
+ exit 0

スクリプト内で set -x を指定する方法

シェルをオプション付きで実行するのではなく、スクリプトのファイル内に記述する方法もあります。 以下のように、set -x をスクリプト内に記述しても同様の結果を得られます。

#!/bin/bash

set -x

idx=0

while true
do
    sleep 1
    echo $idx
    idx=`expr $idx + 1`

    if [ $idx -eq 3 ]; then
        break;
    fi
done

exit 0



シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon