私を助けてくれた皆さんに感謝します。次のコードがあります。ここ
awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
しかし、私は愚かで、私の問題全体を説明しませんでした。人々に質問を変えるのではなく、新しい質問をしてみようと思いました。
私の目標は、/etc/passwdに設定されたホームディレクトリが存在しないフォルダを指すユーザーのリストを出力することです。 (上記のコードはこれを正常に実行します)。
今私が経験している問題は、各ユーザーが実際に存在するホームディレクトリを持っている場合は、空のページの代わりに「結果なし」を表示したいということです。
たとえば、デフォルトのRHELシステムでこのコードを実行すると、次の出力が表示されます。
# awk -F: '{if(system( "[ -d " $6 " ]") == 1) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
The directory /var/adm does not exist for user adm
The directory /var/spool/uucp does not exist for user uucp
The directory /var/gopher does not exist for user gopher
The directory /var/ftp does not exist for user ftp
The directory /var/empty/saslauth does not exist for user saslauth
上記のユーザーはログインできないため、実際には重要ではありません。したがって、これを説明するために、次のようにコードを更新したいと思いました。
awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1 }}' /etc/passwd
これは期待どおりに機能し、結果を表示しませんが、何も表示しない代わりに「結果なし」を表示したいと思います。 (これは愚かな要求のように見えるかもしれませんが、ボール出力がある場合はよりうまく機能する自動化されたツールでこのコマンドを使用します。)
Googleで検索してNRを使用する例をいくつか見つけましたが、うまく機能しませんでした。また、||を見てみると、特定のタイプのコマンドに対して「結果なし」が表示されますが、それも機能しないようです。
Googleは他のオプションを選択するのに役立たないので、助けてくれてありがとう。
答え1
あなたはできます
- ブロックを使用したフラグの
BEGIN
設定 - 現在のテストで見つからないディレクトリが見つかると、フラグは設定解除されます。
- フラグが
END
ブロックにまだ設定されていることを確認し、その場合はメッセージを印刷してください。
例えば
awk -F: '
BEGIN{nores=1;}
{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for user " $1; nores=0 }}
END{if (nores) print "No results";}
' /etc/passwd