我正在尝试编写脚本,假设是解析文件以查找并打印所有非系统帐户的用户名。如果该帐户具有非标准(即非bash)外壳,则脚本应使用星号标记该用户名。我试图让它忽略所有系统帐户,即用户ID小于1000的帐户。如果该帐户的ID至少为1000,则将打印该帐户的用户名。如果该帐户的外壳不是/ bin / bash,则还要在名称后打印一个星号,以表明它是非标准的。
我是bash的新手,确实对某些语法感到困惑。任何帮助将不胜感激。
#!/bin/bash
count=$(cat /etc/passwd | awk -F: '{print $3}')
if [[ $count -ge 1000 ]]; then
cat /etc/passwd | awk -F: '{print $1}'
fi
有更简单的方法吗?
答案 0 :(得分:2)
是的,awk有条件并且可以进行算术运算:
awk -F: '$3 >= 1000 { print $1 }' /etc/passwd
对于/ etc / passwd中的每一行,如果第三列大于或等于1000,则将打印第一列。
您当前的代码可能由于某些奇怪的错误而失败,因为您的count
不是单个用户ID,而是所有用户ID;因此,您无法将该变量的内容与单个整数进行比较。
答案 1 :(得分:0)
您可以使用cut
代替awk
来提取列。您无法在代码段中比较$ count,因为它包含所有数字,您需要一个一个地比较它们:
#!/bin/bash
while read user id ; do
if (( id >= 1000 )) ; then
echo $user
fi
done < <(cut -d: -f1,3 --output-delimiter=' ' /etc/passwd)