使用awk命令的正则表达式

时间:2018-10-15 22:11:31

标签: bash

我正在尝试编写脚本,假设是解析文件以查找并打印所有非系统帐户的用户名。如果该帐户具有非标准(即非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

有更简单的方法吗?

2 个答案:

答案 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)
相关问题