if语句查询etc/passwd中的用户id?

if语句查询etc/passwd中的用户id?

我试图使用 bash 查询/etc/passwdid 超过 1000 的任何用户。如果它们存在,则执行某些操作,否则执行其他操作。我很困惑。任何帮助表示赞赏。

if [ "$(id -u)" -gt "1000" </etc/passwd]; then
    do something
else
    do something else
fi

答案1

要循环执行此操作bash,我建议使用readand IFSlike:

#!/usr/bin/env bash
while IFS=':' read -r user passwd uid gid comment home shell;  do
    if [ "$uid" -gt 1000 ] ; then
        echo GT $user
    else
        echo LT $user
    fi
done < /etc/passwd

答案2

/etc/passwd您应该使用 ,而不是直接阅读getent passwd,如果您的某些用户保存在 LDAP 等内容中,这也可以工作。awk应该非常适合冒号分隔的输出格式。

这将打印 UID > 1000 的所有用户的用户名:

getent passwd | awk -F: '$3 > 1000 {print $1}'

found如果找到至少一个这样的内容,就会打印:

getent passwd | awk -F: '$3 > 1000 {print "found"; exit}'

答案3

尝试这个:

if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'

第一个grep搜索passwduid 为四位或更多位的行。第二个grep过滤掉 uid 1000 的行。如果还有任何行,退出状态将为 0,如果没有,退出状态将为 1。

答案4

使用汤姆的代码这对我有用..

#!/bin/sh
if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'
then 
    echo "exists"
else
    echo "not exists"
fi

相关内容