ifステートメントで比較するために、AWKスクリプトの戻り値(終了ステータス)をシェルスクリプト(bash)にコピーまたは読み取る方法

ifステートメントで比較するために、AWKスクリプトの戻り値(終了ステータス)をシェルスクリプト(bash)にコピーまたは読み取る方法

私はエラー処理を比較するためにif条件で使用するために、awkスクリプトのエラーコードまたは終了ステータスをシェルに読み込みたいと思います。私のシェルスクリプトは次のとおりです。

私のスクリプト:

#!/bin/sh

awk -v CONFIG_SOURCE=Testfile1.txt -f test.awk

echo $?  # prints the error code '2' in this case, if the file is actually not available
recval =  $?

if ($recval == '$2') **//this condition statement doesn't seems to work.**
then 
echo "Some error"
fi

.awk ファイルのテスト:

BEGIN {
   ignore_line = 0;
   if ( CONFIG_SOURCE == "" )
   {
      print "Error: Invalid embed source file.";
      exit 1
   }
   if ( 0 != system( "[ -f " CONFIG_SOURCE " ] " ) )
   {
      print "Error: Embed source file '" CONFIG_SOURCE "' does not exist."
      exit 2
   }
}

したがって、ファイルが利用できない場合は、エコー可能な終了ステータス "2"を返しますが、値 "2"または終了ステータスをシェルの一部の変数にコピーする方法(recval)

ベストアンサー1

これは働きます:

#!/bin/sh

awk -v CONFIG_SOURCE=Testfile1.txt -f test.awk

re=$?
echo "$re"

if [ "$re" -eq 2 ]; then
  echo >&2 "Some error"
fi

スクリプトの問題はecho $?beforeを使用することですrecval = $?。 (最後の問い合わせ終​​了ステータス)echo $?値を印刷すると、$?しかし、それから$?カバーしましたecho $?。最後のステートメントの終了状態はの終了状態であり、ゼロにすることができますecho $?

おすすめ記事