Hack 86. シェルスクリプトデバッグする

シェルスクリプトデバッグするには、シェルスクリプト内の先頭で set -xv を使用します。

デバッグコマンドを使用しないシェルスクリプト:

$ cat filesize.sh
#!/bin/bash
for filesize in $(ls -l . | grep "^-" | awk '{print $5}')
do
  let totalsize=$totalsize+$filesize
done
echo "Total file size in current directory: $totalsize"

デバッグコマンドを使用しないシェルスクリプトの出力:

$ ./filesize.sh
Total file size in current directory: 652

デバッグコマンドを使用するシェルスクリプト:

以下に示すように出力をデバッグするには、シェルスクリプト内に set –xv を追加します。

$ cat filesize.sh
#!/bin/bash
set -xv
for filesize in $(ls -l . | grep "^-" | awk '{print
$5}')
do
  let totalsize=$totalsize+$filesize
done
echo "Total file size in current directory: $totalsize"

デバッグコマンドを使用するシェルスクリプトの出力:

$ ./fs.sh
++ ls -l .
++ grep '^-'
++ awk '{print $5}'
+ for filesize in '$(ls -l . | grep "^-" | awk '\''{print $5}'\'')'
+ let totalsize=+178
+ for filesize in '$(ls -l . | grep "^-" | awk '\''{print $5}'\'')'
+ let totalsize=178+285
+ for filesize in '$(ls -l . | grep "^-" | awk '\''{print $5}'\'')'
+ let totalsize=463+189
+ echo 'Total file size in current directory: 652'
Total file size in current directory: 652

デバッグオプションを使用してシェルスクリプトを実行する:

シェルスクリプト内で –xv をセットする代わりに
以下に示すようにシェルスクリプト実行中に渡すこともできます。

$ bash -xv filesize.sh