BASH 第 1 行的语法错误:“then”不匹配
BASH syntax error at line 1: `then' unmatched
eval: syntax error at line 1: `then' unexpected
嗨,我遇到了这个特定循环的问题,找不到解决方案,有什么想法吗?
getent passwd | cut -f1 -d":" | sort -n | uniq -c |\ while read x ; do [ -z "${x}" ] && break set - $x if [ -gt 1 ]; then gids=`getent passwd |\ nawk -F: '( == n) { print }' n= | xargs` echo "Duplicate Group Name (): ${gids}" fi done
如果您 运行 通过 shellcheck 代码并更正它显示的错误(除了一个有问题的警告),代码将变为:
getent passwd | cut -f1 -d":" | sort -n | uniq -c |
while read -r x ; do
[ -z "${x}" ] && break
set - $x
if [ "" -gt 1 ]; then
gids=$(getent passwd | nawk -F: '( == n) { print }' n="" | xargs)
echo "Duplicate Group Name (): ${gids}"
fi
done
代码似乎仍然存在问题,其中之一是它寻找重复的 user 名称,但打印输出声称它发现了重复的 group 名字。
我建议将上面的替换为:
getent passwd | awk -F: '{c[]++; uids[]=uids[]" "} END{for (name in c) if (c[name]>1) printf "Duplicate User Name (%s):%s\n",name, uids[name]}'
awk 代码的工作原理
在 getent passwd
的输出中,用户名将在字段 1 中,用户 ID 将在字段 3 中。
c[]++; uids[]=uids[]" "
这会计算用户名 </code> 出现的次数,并将计数保存在数组 <code>c
中。它还保存与数组 uids
.
中的每个名称关联的用户 ID </code>
<li><p><code>END{for (name in c) if (c[name]>1) printf "Duplicate User Name (%s):%s\n",name, uids[name]}
处理完 getent 的输出后,这会查找计数大于 1 的用户名并打印信息。
建议代码的多行版本
getent passwd | awk -F: '
{
c[]++
uids[] = uids[] " "
}
END{
for (name in c)
if (c[name]>1)
printf "Duplicate User Name (%s):%s\n", name, uids[name]
}'
eval: syntax error at line 1: `then' unexpected
嗨,我遇到了这个特定循环的问题,找不到解决方案,有什么想法吗?
getent passwd | cut -f1 -d":" | sort -n | uniq -c |\ while read x ; do [ -z "${x}" ] && break set - $x if [ -gt 1 ]; then gids=`getent passwd |\ nawk -F: '( == n) { print }' n= | xargs` echo "Duplicate Group Name (): ${gids}" fi done
如果您 运行 通过 shellcheck 代码并更正它显示的错误(除了一个有问题的警告),代码将变为:
getent passwd | cut -f1 -d":" | sort -n | uniq -c |
while read -r x ; do
[ -z "${x}" ] && break
set - $x
if [ "" -gt 1 ]; then
gids=$(getent passwd | nawk -F: '( == n) { print }' n="" | xargs)
echo "Duplicate Group Name (): ${gids}"
fi
done
代码似乎仍然存在问题,其中之一是它寻找重复的 user 名称,但打印输出声称它发现了重复的 group 名字。
我建议将上面的替换为:
getent passwd | awk -F: '{c[]++; uids[]=uids[]" "} END{for (name in c) if (c[name]>1) printf "Duplicate User Name (%s):%s\n",name, uids[name]}'
awk 代码的工作原理
在 getent passwd
的输出中,用户名将在字段 1 中,用户 ID 将在字段 3 中。
c[]++; uids[]=uids[]" "
这会计算用户名
</code> 出现的次数,并将计数保存在数组 <code>c
中。它还保存与数组uids
. 中的每个名称关联的用户 ID
</code>
<li><p><code>END{for (name in c) if (c[name]>1) printf "Duplicate User Name (%s):%s\n",name, uids[name]}
处理完 getent 的输出后,这会查找计数大于 1 的用户名并打印信息。
建议代码的多行版本
getent passwd | awk -F: '
{
c[]++
uids[] = uids[] " "
}
END{
for (name in c)
if (c[name]>1)
printf "Duplicate User Name (%s):%s\n", name, uids[name]
}'