重複したユーザー名を見つけるには、次のコードを使用します。ただし、エラーが発生します。
#!/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
。