循环用户问题

循环用户问题

我正在努力处理用户 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 

相关内容