bashでシェルスクリプトをデバッグする方法【xオプションの使い方】
こんにちは。
普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】
今回は、bashについての解説記事です。
bashでデバッグする方法を知りたい人
「bashをデバッグモードで動かしたいです。有効なオプションを教えてください。ソースコードを修正しなくてもデバッグモードで動かせますか?」
こんな悩みに答えます。結論から言うと、bashをデバッグ実行するにはbashコマンドにxオプションを指定するだけ
です。
この記事を書いた私は、年収1,000万円ちょっとのエンジニア。高校生の頃から約20年間、bashやtcsh、zshのようなシェルスクリプトのほか、C/C++,Java,SML,Ocamlなど様々なプログラミング言語を扱ってきました。
数あるプログラミング言語の中でも、bashのようなスクリプト言語は簡単かつ効率的に処理を行うことができるのが特徴です。
今回はbashのデバッグの仕方を解説します。
本記事の内容
- ①bashをデバッグ実行するベーシックな方法
- ②実行時、常にデバッグする方法
- ③スクリプトファイルを読み込みながらデバッグ実行する方法
bashをデバッグ実行する方法
bashをデバッグするにはxオプションを指定します。コマンドの構文は以下の通りです。
bash -x 《ファイル名》
helloというbashのスクリプトファイルをデバッグするには次のようにします。プログラムの中身は、echoするだけの単純なスクリプトです。
$ cat ./hello #!/bin/bash echo "Hello, World"
$ bash -x ./hello + echo 'Hello, World' Hello, World
実行時、常にデバッグする方法
一回限りではなく常にデバッグモードで動かしたい場合は、スクリプトファイル内の1行目にオプションを記述することができます。
$ cat ./hello2 #!/bin/bash -x echo "Hello, World"
$ ./hello2 + echo 'Hello, World' Hello, World
この記述は、不具合のあるプログラムの再現テストをする際など、プログラム実行時のデバッグログを残したい時に便利です。
デバッグログは標準エラー出力
なお、デバッグログは次のように標準出力ではなく標準エラー出力に出ますのでご注意ください。
$ ./hello2 2> ../log/hello2.log Hello, World $ cat ../log/hello2.log + echo 'Hello, World'
スクリプトファイルを読み込みながらデバッグ実行する方法
最後にスクリプトファイルを読み込みながらデバッグ実行する方法を解説します。
cat 《ファイル名》 | bash -x
この構文のプログラム例を以下に示します。
$ cat ./hello #!/bin/bash echo "Hello, World"
$ cat ./hello | bash -x + echo 'Hello, World' Hello, World
この構文は、プログラムを動的に変更しながら実行する場合に便利です。
次の例では、同じプログラムをsedコマンドで動的に書き換えながらデバッグ実行します。
- (動的な書き換えその1) Hello, WorldをHello, Japanにする
- (動的な書き換えその2) 5秒sleepするようにする
% cat ./hello | sed -e 's/"Hello, World"/"Hello, Japan";sleep 5/g'| bash -x + echo 'Hello, Japan' Hello, Japan + sleep 5
Blog TOP シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ
bashの使い方 - もくじ
シェルとは
- シェルとは
- シェルはOSと会話するための言語
- シェルの種類(bash以外のシェル)
- シェルスクリプトとは
- シェルスクリプトの書き方条件式
- if else文
- 文字列の比較
- &&と||の使い方
- case文文字列操作
- 文字列の連結
- 文字列の一部を切り出す繰り返し
- for文
- while文
- while文でリストから1つ要素ずつ処理する定数
- 定数の定義
関数
- 関数の定義
デバッグ
実行権限
本