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

Linux

プログラミングではよくデバッグで変数の値やデータの流れなどを確認しますが、シェルスクリプトでのデバッグの方法を知らなかったので、今回調べてみました。



今回はMac上でbashを使用しています。

$ echo $SHELL
/bin/bash




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

結論、以下のように -x オプションを付与することでデバッグが実行されます。

$ bash -x 実行するシェルスクリプト

sh , ksh , cshなどでも同様に実行できます。


シェルスクリプトを作成する

デバッグを実行するために簡単なシェルスクリプト(shell.sh)をviで作成します。
viの操作方法について初めての方はこちらも合わせてどうぞ。

超初心者向けviエディタの使い方

$ vi shell.sh

↓↓以下、shell.shの中↓↓

#!/bin/bash

read line
var1=`date "+%Y/%m/%d %H:%M:%S"`
var2=$line

if [ $var2 = hello ]; then
    echo $var1 > test.txt
    echo 'correct'
else 
    echo 'not correct'
fi

exit 0

実行するとプロンプト待ちの状態で「hello」を入力で本日の日付が入力されたtest.txtが作成されます。
また「correct」が表示されます。それ以外を入力すると「not correct」と表示されます。


デバッグを実行する

ではデバッグを実行してみましょう。

$ bash -x shell.sh 
プロンプト待ちになり「hello」を入力

↓↓↓以下が出力↓↓↓

+ read line
hello
++ date '+%Y/%m/%d %H:%M:%S'
+ var1='2021/09/03 22:05:47'
+ var2=hello
+ '[' hello = hello ']'
+ echo 2021/09/03 22:05:47
+ echo correct
correct
+ exit 0

デバッグオプションで実行すると、上のようになります。

+ はシェルスクリプト内で実行されたコマンドと変数の中身を
++ は` `(バッククォート)内で実行されたコマンドを表しています。

デバッグを実行することで変数、ifの条件式、コマンドの実行結果を確認できました。
コマンド実行時に -x オプションを追加する以外にもシェルスクリプト内に記述することでデバッグを実装することができます。


その他のデバッグ方法

シェルスクリプト内のシェル宣言箇所に-xオプションを記述する

$ vi shell.sh

#!/bin/bash -x ←宣言箇所に-xを記述
.
.
.

同じようにデバッグが実行されますが、シェルスクリプト内に記述するため変数などが確認できたら忘れずに消しておきましょう。

またシェルスクリプト内の一部分だけをデバッグする方法もあります。

[シェルスクリプト内]
set -x デバッグしたい箇所 set +x

#!/bin/bash

read line
var1=`date "+%Y/%m/%d %H:%M:%S"`
var2=$line

#デバッグの開始位置
set -x 
if [ $var2 = hello ]; then
    echo $var1 > test.txt
    echo 'correct'
else 
    echo 'not correct'
fi
set +x 
#デバッグの終了位置

exit 0



-v オプション

このオプションを使用することでシェルスクリプト内で記述した内容が表示されます。
単体で使用するよりは-xオプションと合わせて使用することでシェルスクリプト内を確認しながらデバッグを行うことができます。

$ bash -xv ./shell.sh

#!/bin/bash

read line
+ read line
hello
var1=`date "+%Y/%m/%d %H:%M:%S"`
date "+%Y/%m/%d %H:%M:%S"
++ date '+%Y/%m/%d %H:%M:%S'
+ var1='2021/09/04 01:46:41'
var2=$line
+ var2=hello

set -x
+ set -x
if [ $var2 = hello ]; then
    echo $var1 > test.txt
    echo 'correct'
else 
    echo 'not correct'
fi
+ '[' hello = hello ']'
+ echo 2021/09/04 01:46:41
+ echo correct
correct
set +x
+ set +x

exit 0


今回はシェルスクリプトのデバッグ方法をみていきました。



こちらはudemyで公開されているLinuxの動画講座です。
2000人以上(2021年7月現在)の方が視聴しており、Linuxコマンドを学べるのはもちろん、必要な概念も合わせて取得できると思いますので、気になる方はまずはコースのプレビュー(無料)からみてみてください。

コメント

タイトルとURLをコピーしました