腰椎 固定 術 再 手術 ブログ

Fri, 28 Jun 2024 11:39:02 +0000

シェルスクリプトをデバッグするには プログラムにバグはつきものであり、それはシェルスクリプトも例外ではない。bash にはシェルスクリプトのデバッグに非常に有効なオプションが用意されているので、「Syntax Error」で実行できない場合や、変数にどんな値が設定されているのか確認したい場合は、それらオプションを指定した上で実行することで、簡単にデバッグを行うことができる。 「-x」オプションを使用する -x オプションは、シェルスクリプト内で実際に実行されたコマンドを表示するオプションである。変数が使用されている場合は、その変数の値が展開された状態で表示される。 bash -x デバッグするシェルスクリプト → bash に -x オプションを指定し、引数にデバッグするシェルスクリプトを指定する。 -x オプションでシェルスクリプトを実行すると、echo コマンドなどの出力に加えて、スクリプト内で実際に実行されたコマンドラインが出力される。この出力により、変数に設定されている値などを確認することができる。 また、この場合は bash を使用しているが、Bシェルで実行される場合は sh を、Kシェルで実行される場合は ksh をそれぞれ使用する。 変数に値を設定するのみのシェルスクリプト () を作成して、 -x オプションでの実行結果を見てみる。 #! /bin/bash var1 = ` date +%M ` var2 = ` ls -1 | wc -l ` if [ $var1 -ge 30]; then var3 = "BIG" else var3 = "SMALL" fi exit 0 このシェルスクリプト の -x オプション付き実行結果は、以下のとおりとなる。 $. / $ #↑通常通りに実行すると、何も出力されずに終了する。 $ bash -x. シェルスクリプトのデバッグ | UNIX & Linux コマンド・シェルスクリプト リファレンス. / ++ date +%M + var1=46 ++ ls -1 ++ wc -l + var2=26 + '[' 46 -ge 30 ']' + var3=BIG + exit 0 #↑「-x」オプション付きだと、実際に実行されたコマンドと変数に設定された値を確認できる。 行頭に + が付いているコマンドがシェルスクリプト内で実行されたコマンド、 ++ は `` (バッククォート) 内で実行されたコマンドとなっている。 通常の実行では変数に設定される値を確認できないが、 -x オプションを使用すると実際に実行されたコマンドが出力される。これを見ることで実行時に変数に設定された値を確認することができる。 実行時に -x オプションを指定する以外にも、シェルスクリプト内に直接オプションを記述することでも同様の効果を得ることができる。 実際にシェルスクリプト () 内で -x オプションを指定してみる。 #!

  1. シェルスクリプトのデバッグ | UNIX & Linux コマンド・シェルスクリプト リファレンス

シェルスクリプトのデバッグ | Unix &Amp; Linux コマンド・シェルスクリプト リファレンス

/ -d など)、この方式だとメイン処理で使用したいオプションと被ったり、引数チェックが複雑になったりと、デメリットばかりが大きかった。デバッグ用ログファイルの存在自体をデバッグフラグとする方式だと、そのようなデメリットは一切なく、簡単にデバッグモードで実行することができる。 このデバッグ用関数を使用したシェルスクリプト () を作成してみる。 # デバッグ用ログファイルの設定 readonly _DEBUG_LOGFILE_ = ". /" DEBUG_LOG " $LINENO: デバッグを開始します。" DEBUG_LOG "コマンド実行結果も出力できます。\n`cal`" # パイプ処理の途中にも組み込み可能 cal | grep 15 | DEBUG_LOG | awk '{print $3}' DEBUG_LOG " $LINENO: デバッグを終了します。" シェルスクリプト中で使用している変数 LINENO は、使用した場所の行番号が自動的に設定される特殊変数である。デバッグ作業には非常に有効な変数なので、ぜひ覚えておいてほしい。 $ ls. / /bin/ls:. / そのようなファイルやディレクトリはありません #↑デバッグ用ログファイルが存在しないので、非デバッグモードで動作するはず。 12 #↑正常に結果が出力されている。 #↑デバッグ用ログファイルには出力されいてない。 $ touch. / #↑今度はデバッグ用ログファイルを作成し、デバッグモードで動作させる。 #↑デバッグモードでも実行結果は変わらない。 #↓デバッグ用ログファイルにはログが出力されている。 $ cat. / --- 2007/06/05 23:00:19 -------------------------------- 33: デバッグを開始します。 コマンド実行結果も出力できます。 6月 2007 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #↑これがパイプ処理の途中の値になる。 40: デバッグを終了します。

for(var i=0; i<5; i++) { (i);} この例では、単純なfor文を使って初期値「i」を()の引数に指定しています。これにより、for文がループする度に「i」の値が以下のように出力されるわけです! 変数「i」の中身がどのように変化しているのか一目瞭然ですね。もっと複雑な計算処理をしている場合などは、この方法は効果的でしょう。 ブレークポイントの使い方 先ほどは「()」を使って変数の値を確認しましたが、さらに効果的なデバッグ方法もあるのでご紹介しておきます。単純に変数の中身だけを追っていきたいのであれば「ブレークポイント」を利用するのがオススメです。 ブレークポイントは、コードの一部分を指定することで処理をそこでストップさせることができます。繰り返し処理や複数の関数を呼び出しているような場合に有効で、コードが意図した通りに進んでいるかをチェックできます。 方法は簡単で、まず最初に「Sources」タブを開いて一時的にストップさせたい箇所の行番号をクリックします! そして、ブラウザの更新ボタンをクリックして画面を再度表示させてみましょう。すると、ブレークポイントの箇所でプログラムが一時的にストップしているのが分かります。 あとは、「ステップ実行」ボタンをクリックする度に処理が1ステップずつ実行されていきます。また、変数の中身を確認する際に画面右側の「+」アイコンをクリックして変数名を設定してみましょう。 すると、処理が実行されていく過程で変数「i」の中身がリアルタイムに出力されていくのです! このようにブレークポイントを活用すれば、デバッグの効率化が見込めるのでぜひ参考にしてみてください。 Consoleオブジェクトについて 冒頭で「()」を使いましたが、Consoleオブジェクトにはデバッグに活用できるメソッドがたくさんあります。なかでも一般的なデバッグで多用するメソッドの一覧は以下の通りです。 メソッド名 内容 () 任意の値を出力する コンソール画面をクリアにする エラー情報として出力する(他に、info() / warn()もあり) インデントを付けて出力することで階層構造を持たせる(groupEnd()で終了する) time()〜timeEnd()までの間にある処理を計測する 呼び出し元などを記録した実行過程を出力する 実行する度にカウントアップして回数を出力する 配列やオブジェクトなどの構造をテーブル表にして出力する オブジェクトが持つプロパティの一覧をリストで出力する 変数の中身や処理の流れを追っていくメソッドが基本となります。ただ、「()」は処理に掛かる時間を計測してくれるメソッドで、これはプログラムの最適化を行うのに便利なので覚えておきましょう!