![循环用户问题](https://linux22.com/image/210383/%E5%BE%AA%E7%8E%AF%E7%94%A8%E6%88%B7%E9%97%AE%E9%A2%98.png)
我正在努力处理用户 id 的循环,我想列出 /etc/passwd 中 id 大于 999 的所有用户,它无法识别我的 if .. fi 句子,重要的是要说我正在工作使用最小安装,所以我没有“awk”命令,这是我的实际代码
cat /etc/passwd | while IFS=: read name pass uid gid geos home; do if [$uid > 999]; then echo $name di done;
我也尝试过 -gt 但它也不起作用
答案1
你提到你没有awk
。这很遗憾,因为这本来是一个高效的解决方案:
awk -F: '$3 > 999' /etc/passwd
如果您有grep
并且cut
可以通过具有至少四个字符的 uid 来提取您的用户:
grep '^[^:]*:[^:]*:[^:][^:][^:][^:]' /etc/passwd | cut -d: -f1
或者sed
:
sed -n 's/^\([^:]*\):[^:]*:[^:][^:][^:][^:].*/\1/p' /etc/passwd
如果您发现确实需要使用 shell 进行循环,这里有一个固定代码的版本。主要的错误是忘记了这[
是一个命令,因此标记器需要空格。我也整理了一下read
。
while IFS=: read -r name x uid gid geos home shell
do
[ "$uid" -gt 999 ] && echo "$name"
done
让你的代码通过https://shellcheck.net/会对你有帮助的。下次我会推荐它。
答案2
括号周围需要空格:
这:
if [$uid > 999];
应该:
if [ "$uid" -gt 999 ];
如果您比较数字,请使用-gt
.并且不要忘记引用变量
if
结构的结尾也是fi
, 不是di
脚本应该是:
cat /etc/passwd | while IFS=: read name password uid gid geos home; do if [ "$uid" -gt 999 ]; then echo $name ;fi ;done