use*_*222 8 bash users text-processing etc passwd
使用 bash 我试图查询/etc/passwd
任何 id 超过 1000 的用户。如果他们存在,做一些事情,否则做其他事情。我难住了。任何帮助表示赞赏。
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Run Code Online (Sandbox Code Playgroud)
Ste*_*uch 16
要bash
循环执行此操作,我建议使用read
并IFS
喜欢:
#!/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
Run Code Online (Sandbox Code Playgroud)
ilk*_*chu 14
/etc/passwd
您应该使用getent passwd
,而不是直接阅读,如果您的某些用户保存在诸如 LDAP 之类的东西中,这也将起作用。awk
应该非常适合冒号分隔的输出格式。
这将打印 UID > 1000 的所有用户的用户名:
getent passwd | awk -F: '$3 > 1000 {print $1}'
Run Code Online (Sandbox Code Playgroud)
found
如果至少找到一个这样的东西,这只会打印:
getent passwd | awk -F: '$3 > 1000 {print "found"; exit}'
Run Code Online (Sandbox Code Playgroud)
尝试这个:
if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'
Run Code Online (Sandbox Code Playgroud)
第一个grep
搜索passwd
uid 为四位或更多位的行。第二个grep
过滤掉 uid 1000 的行。如果有任何行,退出状态将为 0,否则为 1。