BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

シェルスクリプトで構文チェックのデバッグモードを実行する方法

シェルスクリプトのデバッグシリーズは、さまざまなデバッグオプションと、シェルスクリプトのデバッグモードを有効にする方法を説明することから始めました。

シェルスクリプトを作成した後は、スクリプトの出力を調べて正しく機能していることを確認するのではなく、スクリプトを実行する前に、スクリプトの構文を実際に確認することをお勧めします。

シリーズのこのパートでは、構文チェックのデバッグモードの使用方法について説明します。このシリーズの最初のパートでさまざまなデバッグオプションについて説明したことを思い出してください。ここでは、それらを使用してスクリプトのデバッグを実行します。

詳細デバッグモードの有効化

このガイドの主な焦点に移る前に、冗長モードについて簡単に説明しましょう。 。 -vによって有効になります デバッグオプション。読み取り中にスクリプト内のすべての行を表示するようにシェルに指示します。

これがどのように機能するかを示すために、PNG画像をJPG形式にバッチ変換するためのサンプルシェルスクリプトを以下に示します。

ファイルに入力(またはコピーして貼り付け)します。

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

次に、ファイルを保存し、次のコマンドを使用してスクリプトを実行可能にします。

$ chmod +x script.sh

次のように、スクリプトを呼び出して、シェルによって読み取られるすべての行を表示できます。

$ bash -v script.sh
シェルスクリプトで構文チェックのデバッグモードを実行する方法

シェルスクリプトでの構文チェックのデバッグモードの有効化

強調するトピックに戻ると、-n 構文チェックモードをアクティブにします。基本的にすべてのコマンドを読み取るようにシェルに指示しますが、コマンドは実行せず、(シェルは)使用されている構文のみを調べます。

シェルスクリプトにエラーがある場合、シェルは端末にエラーを出力します。それ以外の場合、シェルは何も表示しません。

構文チェックをアクティブにするための構文は次のとおりです。

$ bash -n script.sh

スクリプトの構文が正しいため、上記のコマンドは出力を表示しません。したがって、doneを削除してみましょう forループを閉じて、エラーが表示されるかどうかを確認する単語:

以下は、png画像をバグを含むjpg形式にバッチ変換するために変更されたシェルスクリプトです。

#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

ファイルを保存し、構文チェックを実行しながら実行します:

$ bash -n script.sh
シェルスクリプトで構文チェックのデバッグモードを実行する方法

上記の出力から、スクリプトに構文上の問題があり、forループに終了doneがないことがわかります。 キーワードワード。そして、シェルはファイルの最後までそれを探しましたが、見つからなかった場合(完了 )、シェルは構文エラーを出力しました:

script.sh: line 11: syntax error: unexpected end of file

詳細モードと構文チェックモードを組み合わせることもできます:

$ bash -vn script.sh
シェルスクリプトで構文チェックのデバッグモードを実行する方法

または、次の例のように上記のスクリプトの最初の行を変更して、構文チェックを有効にすることもできます。

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

前と同じように、ファイルを保存して、構文チェックを実行しながら実行します。

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

さらに、set shell組み込みコマンドを使用して、上記のスクリプトでデバッグモードを有効にすることができます。

以下の例では、スクリプトのforループの構文のみをチェックしています。

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0

もう一度、ファイルを保存してスクリプトを呼び出します。

$ ./script.sh 

要約すると、実行する前に、シェルスクリプトを構文的にチェックして、エラーをキャプチャすることを常に確認する必要があります。

このガイドに関する質問やフィードバックを送信するには、以下の回答フォームを使用してください。このシリーズの第3部では、シェルトレースデバッグモードの説明と使用に移ります。


  1. Vimでシェルスクリプトのカスタムヘッダーテンプレートを作成する方法

    この記事では、Vimエディターで新しく作成されたすべてのbashスクリプトのカスタムヘッダーを構成する簡単な方法を紹介します。これは、新しい.shを開くたびに vi / vimエディターを使用してファイルを作成すると、カスタムヘッダーがファイルに自動的に追加されます。 カスタムBashスクリプトヘッダーテンプレートファイルを作成する方法 まず、 sh_header.tempというテンプレートファイルを作成することから始めます。 、おそらく~/.vim/の下にカスタムbashスクリプトヘッダーが含まれています 自宅の下のディレクトリ。 $ vi ~/.vim/sh_header.temp 次

  2. USB デバッグ モードと Android で有効にする方法

    Android ユーザーが知っておかなければならないことには、そもそも驚くべき隠された機能である USB デバッグが含まれます。これは平均的なユーザーにとっては重要ではないように思えるかもしれませんが、開発者にとっては重要な部分です。先に進む前に、それについてもっと理解しましょう。 USB デバッグとは あなたがアプリ開発者であれば、高度なオプションを使用するために Android フォンの内部動作にアクセスしたいと思うことは間違いありません。デバッグモードでは、USB を使用して同じことができます。さらに、Android Software Developer Kit (SDK) を搭載した