CentOSで冗長ユーザーを探す

CentOSで冗長ユーザーを探す

重複したユーザー名を見つけるには、次のコードを使用します。ただし、エラーが発生します。

#!/bin/bash
cat /etc/passwd | cut -f1 -d":" | /bin/sort -n | /usr/bin/uniq -c |\
    while read x; do [ -z "${x}" ] && break set - $x
        if [ $1 -gt 1 ]; then
            uids=`/bin/gawk -F: '($1 == n) { print $3 }' n=$2 \
            /etc/passwd | xargs`
            echo "Duplicate User Name ($2): ${uids}"
        fi
    done

「完了」マークの近くで構文エラーと数値エラーが発生します。このエラーをどのように解決できますか?

ベストアンサー1

$ cut -d: -f1 /etc/passwd | sort | uniq -d

:これにより、区切られたファイル(ユーザー名)の最初のフィールドが抽出され、/etc/passwd結果がソートされ、重複項目が報告されます。

UIDと残りの重複passwdエントリの両方を取得します。

cut -d: -f1 /etc/passwd | sort | uniq -d |
while read -r username; do
  grep "^$username:" /etc/passwd
done

重複したユーザー名とそのUIDのみを取得します。

cut -d: -f1 /etc/passwd | sort | uniq -d |
while read -r username; do
  awk -F: -vu="$username" '$1 == u { print $1, $3 }' /etc/passwd
done

スクリプトに関する簡単なメモです。文法そうだほとんどはうまくいきますが、;後で必要であり、breakどちらも後ろにスペースがあります\(おそらく切り取りと貼り付けエラーでした(現在の編集で削除されています))。また、正当な理由なしに標準ユーティリティへのフルパスを提供するのを避け、awkプログラムにGNUが必要ないため、問題ありawkませんawk

おすすめ記事