Đây là một tiếp theo cho câu hỏi trước đây của tôi .
Tôi đang xác thực số lượng các trường trong / etc / passwd bằng cách sử dụng đoạn trích tiện dụng này. Trong ví dụ sau, người dùng 'fieldcount1' và 'fieldcount2' có số trường sai:
$ 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
Như bạn sẽ thấy, awk sẽ thoát với trạng thái trả về 0. Từ quan điểm của nó, không có vấn đề gì ở đây.
Tôi muốn kết hợp tuyên bố awk này vào một kịch bản shell. Tôi muốn in tất cả các dòng bị lỗi và đặt mã trả về là 1 (lỗi).
Tôi có thể cố gắng buộc một trạng thái thoát cụ thể, nhưng sau đó awk chỉ in một dòng duy nhất:
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
Tôi có thể buộc awk thoát với trạng thái trả về '1' và in tất cả các dòng khớp không?
; echo $?
sau câu lệnh awk này. Tuy nhiên,echo $?
không bao giờ được chạy vìEND {exit err}'
chấm dứt tập lệnh. Có cách nào để thiết lập trạng thái trả lại mà không thoát?