ユーザー名ガイドを設定する awk コマンド

ユーザー名ガイドを設定する awk コマンド

/etc/passwdから読み取ったユーザー名が特定の指示に従わない場合は、エラーメッセージを印刷するawkコマンドを探しています。手順は次のとおりです。フィールドは文字で始まる必要があり、最大8文字、数字、下線、ハイフン、およびドットを含めることができます。ユーザー名が8文字を超えていないことを確認しましたが、コマンドの実行に問題があります。つまり、文字、数字、下線、ハイフン、およびドットのみを使用できます。

現在のコード:

{if (length($1) >= 9) print "Error: The username has too many characters on line " NR}
{if ($1 != [a-z]) print "Error"}  //Here is where I need the command.

if文が複数必要ですか?それでは、適切なawkステートメントを見つけるのに役立ちますか?

ありがとう

ベストアンサー1

最も簡単な方法は、ユーザー名の条件ごとに1つのテストを実行することです。これにより、進行状況を簡単に確認でき、修正や拡張も容易になります。単一の正規表現はすぐに扱いにくくなります。

/^[^a-z]/      { printf("Does not start with a letter:\t%s\n", $0)   }
length > 8     { printf("Longer than 8 characters:\t%s\n", $0)       }
/[^a-z0-9_.-]/ { printf("Contains disallowed characters:\t%s\n", $0) }

ここで注目すべき点は、-最後のテストのダッシュ()です。の最初または最後でなければなりません[...]

次のユーザー名を使用してawkスクリプトを提供します/etc/passwd

$ cut -d ':' -f 1 /etc/passwd | awk -f usernamecheck.awk
Does not start with a letter:   _portmap
Does not start with a letter:   _identd
Does not start with a letter:   _rstatd
Does not start with a letter:   _rusersd
Does not start with a letter:   _fingerd
Does not start with a letter:   _x11
Does not start with a letter:   _switchd
Does not start with a letter:   _traceroute
Longer than 8 characters:       _traceroute

(等)

おすすめ記事