2010-01-26 178 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"