2010-01-26 170 views
0

如何编写awk命令来读取/ etc/passwd文件,并打印出仅有/ bin/bash程序作为默认命令shell的任何用户的名称?AWK命令帮助

回答

4
cat /etc/passwd | awk -F ":" '$7=="/bin/bash" { print $1 }' 
+7

+1,但没用使用猫! :-)'awk -F:'$ 7 ==“/ bin/bash”{print $ 1}'/ etc/passwd' – 2010-01-26 19:34:03

+0

gbacon是对的,不需要猫。 – 2010-01-26 19:37:29

1

awk -F: '/\/bin\/bash$/{print $1}' /etc/passwd

+0

因此/ bin/bash与/ tmp/attack/bin/bash相同吗? – 2010-01-26 20:55:18

+0

好的。像Bear一样检查整个领域是一个更好的方法。 – jamessan 2010-01-26 21:07:28

+0

由于您已将分隔符设置为“:”,为什么要检查整个行是否为bash?使用$ 7 – ghostdog74 2010-01-26 23:39:09

3

由于这是家庭作业,我不会写代码,你(希望没有人会那样做),但这里是你需要知道:

  • AWK中的默认字段分隔符是空格; /etc/passwd中的字段分隔符是冒号。您可以通过命令行中的FS变量或-F更改AWK中的字段分隔符。

  • /etc/passwd/中,shell列在第7个字段中。

那么,在我写这么多的时候,两个人已经为你做了功课。祝你好运!

+0

糟糕,我发布时没有注意到作业标签。 – jamessan 2010-01-26 19:36:54

0

@OP,您可以用awk

awk 'BEGIN{FS=":"}$7~/bash/{print $1}' /etc/passwd 

上述检查对于bash,但不限制为/ bin/bash的。如果您确实需要/ bin/bash,请更改它。

,或者告诉你的老师,你要使用只是外壳

#!/bin/bash 

while IFS=":" read -r user b c d e f sh h 
do 
    case "$sh" in 
     *bash*) echo $user;; 
    esac 
done <"/etc/passwd"