これは私の以前の質問のフォローアップです。
この便利なスニペットを使用して、/ etc / passwdのフィールド数を検証しています。次の例では、ユーザー「fieldcount1」と「fieldcount2」のフィールド数が間違っています。
$ awk -F: ' NF!=7 {print}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash:
$ echo $?
0
お気づきのとおり、awkは戻りステータス0で終了します。この観点からは、ここでは問題はありません。
このawkステートメントをシェルスクリプトに組み込みたいと思います。エラーであるすべての行を印刷し、戻りコードを1(エラー)に設定したいと思います。
特定の終了ステータスを強制しようとすることができますが、awkは1行のみを出力します。
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
awkを強制的に終了ステータス「1」で終了させ、一致するすべての行を印刷できますか?
; echo $?
このawkステートメントの後に何かを追加することで、このawkステートメントの戻りステータスをキャプチャしようとしています。ただし、echo $?
はEND {exit err}'
スクリプトを終了するため実行されません。終了せずに戻りステータスを設定する方法はありますか?