我试图使用 bash 查询/etc/passwd
id 超过 1000 的任何用户。如果它们存在,则执行某些操作,否则执行其他操作。我很困惑。任何帮助表示赞赏。
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
答案1
要循环执行此操作bash
,我建议使用read
and IFS
like:
#!/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
搜索passwd
uid 为四位或更多位的行。第二个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