シェルスクリプトもプログラムの一種です。プログラムを正しく書いたつもりでも間違えてしまうこと、いわゆるバグは必ずと言って良いほど、出てくるものです。
間違いを探して修正することをデバッグといいます。どんなプログラムでもデバッグ作業は必要です。

シェルスクリプトのデバッグを実際にやってみましょう。

まず、以下のテキストファイルを作成します。

$ vi sample05.sh
echo "Hello. I am `whoam`."

「`」で囲まれた部分はコマンドとして実行され、その実行結果の文字列で置き換えられます。
ただ、上記サンプルで記述している「whoam」というコマンドは存在しません。(正しくは「whoami」です。)

このテキストファイルに実行権を与えて、シェルスクリプトとして実行してみます。

$ chmod u+x sample05.sh
$ ./sample05.sh

実行結果

./sample05.sh: line 1: whoam: command not found
Hello. I am .

「whoam: command not found」と出力され、どうもうまくコマンドが実行できていないようです。今度は「sh -x ./sample05.sh」として実行してみます。

$ sh -x ./sample05.sh
++ whoam
./sample05.sh: line 1: whoam: command not found
+ echo 'Hello. I am .'
Hello. I am .

「sh -x」を付けて実行すると、スクリプトの中で実行するコマンドを表示してから実行します。行頭に「+」がついているのが、実行されたコマンドです。その後に、実行したコマンドの結果が表示されます。

この方法だと、どのコマンドでエラーが発生したのかがわかります。サンプルのような行数の少ない簡単なスクリプトだと必要性は感じないかもしれませんが、複雑なスクリプトになると、エラー発生箇所を探すだけでも大変なので、このデバッグ機能はとても便利です。