2017-01-05 4 views
0

私はgrepを使ってパスワードファイルを解析しています。パスワードファイルで正確な単語をgrepする必要がありますが、2つの応答が返ってきます

私は

grep -w "avahi" /etc/passwd 

を使用する場合、私は私が私のユニークな応答を与えるための方法を発見していない2つの応答
avahiavahi-autoipd
を取得します。

このコマンドは、実際には名前(avahi)が変数である大きなスクリプトの一部です。

これは、名前がrpcrpcuserの場合に機能します。だから私はそれが名前にダッシュ(-)と関係があると推測しています。

実際のコード:

#!/bin/ksh 
getent shadow |cut -d: -f1-2|grep ':!!'| cut -d: -f1 > /tmp/pasck 
while read line 
do 
    NOLOGIN=`grep -w $line /etc/passwd | cut -d -f7|cut -d/ -f3` 
if [[ $NOLOGIN != "nologin: && $NOLOGIN != "false" ]] ; then 
echo "$line" "$NOLOGIN" >> /tmp/pasck.list 
fi 
done <?tmp/pasck 

スクリプトはshadowファイルを経由して、パスワードを持たないユーザーを探すためにしようとしています。次に、結果をpasswdファイルと比較して、いずれのアカウントが/bin/falseまたは/sbin/nologinに設定されているかを調べます。残りの部分はパスワードが設定されておらず、システム上で許可されている実際のユーザーになります。

答えて

4

物事をシンプルに保つ - あなたのgrep声明の中で、ユーザ名の後に来るコロンを含めることができます

$ grep "^avahi:" /etc/passwd 
+1

ありがとうございます。私はいつもシンプルが好きです。 – CharlieB

0

あなたはを使用して明示的に最初のコロンで区切られたフィールドテストすることができます。

awk -F: '$1 = "avahi"' /etc/passwd

関連する問題