Shellデバッグ編
1587 ワード
構文のチェック
-nオプションは、スクリプトを実行せずに構文チェックのみを行います.
デバッグの開始
デバッグモードに入ると、Shellは読み込んだ文を順次実行し、生成された出力にはプラス記号が付き、持たないものがあり、以下のようになります.プラス記号は、この文がShellによって実行されたことを示します.プラス記号なしで文がShellによって生成された出力であることを示します.
デバッグの中断
デバッグ中にCtrl+Zを押してデバッグを中断し、結果を観察し、fgキーを押してデバッグを続行すればよい.
デバッグブロック
上の-xオプションはスクリプト全体をデバッグします.スクリプトが大きいと不便です.コードをデバッグする方法もあります.次のようにします.
これにより、set−xとset+xとの間のコードのみが追跡される.
デバッグ関数
よくあるエラーの診断
このエラーは、パラメータが与えられていないか、パラメータの個数が少なくなったなど、パラメータの伝達に誤りがあるのが一般的です.shellスクリプトはshiftを使用して次のパラメータを取得するため、個数が間違っている場合、shiftコマンドは失敗します.
^MはWindows上のリターンバーrのUNIX上の表示形式です.この場合、Windowsでshellスクリプトを編集し、UNIX/Linuxで実行することが多いです.ファイル内のすべてのrを削除すればよい.
あるいはもっと標準的な方法で、rのASCIIコードは015なので、そうすることができます.
デバッグトラップの設定
後で続きます...
==
-nオプションは、スクリプトを実行せずに構文チェックのみを行います.
sh -n script_name.sh
デバッグの開始
sh -x script_name.sh
デバッグモードに入ると、Shellは読み込んだ文を順次実行し、生成された出力にはプラス記号が付き、持たないものがあり、以下のようになります.プラス記号は、この文がShellによって実行されたことを示します.プラス記号なしで文がShellによって生成された出力であることを示します.
+ array=(1 2 3 4 5)
+ for i in '${array[*]}'
+ echo 1
1
デバッグの中断
デバッグ中にCtrl+Zを押してデバッグを中断し、結果を観察し、fgキーを押してデバッグを続行すればよい.
デバッグブロック
上の-xオプションはスクリプト全体をデバッグします.スクリプトが大きいと不便です.コードをデバッグする方法もあります.次のようにします.
set -x
...
code block
...
set +x
これにより、set−xとset+xとの間のコードのみが追跡される.
デバッグ関数
set -x
Function call
set +x
よくあるエラーの診断
xxx.sh: cannot shift
このエラーは、パラメータが与えられていないか、パラメータの個数が少なくなったなど、パラメータの伝達に誤りがあるのが一般的です.shellスクリプトはshiftを使用して次のパラメータを取得するため、個数が間違っている場合、shiftコマンドは失敗します.
xxx.sh: ^M: not found
^MはWindows上のリターンバーrのUNIX上の表示形式です.この場合、Windowsでshellスクリプトを編集し、UNIX/Linuxで実行することが多いです.ファイル内のすべてのrを削除すればよい.
tr -d "\r" <oldfile.sh > newfile.sh
あるいはもっと標準的な方法で、rのASCIIコードは015なので、そうすることができます.
tr -d "\015" < oldfile.sh > newfile.sh
デバッグトラップの設定
後で続きます...
==