【发布时间】:2010-01-27 07:45:01
【问题描述】:
如何编写一个 awk 命令来读取 /etc/passwd 文件,并仅打印出任何将 /bin/bash 程序作为其默认命令 shell 的用户的名称?
【问题讨论】:
标签: awk
如何编写一个 awk 命令来读取 /etc/passwd 文件,并仅打印出任何将 /bin/bash 程序作为其默认命令 shell 的用户的名称?
【问题讨论】:
标签: awk
cat /etc/passwd | awk -F ":" '$7=="/bin/bash" { print $1 }'
【讨论】:
awk -F: '$7 == "/bin/bash" { print $1 }' /etc/passwd
由于这是家庭作业,我不会为您编写程序(希望其他人也不会这样做),但您需要了解以下内容:
AWK 中的默认字段分隔符是空格; /etc/passwd 中的字段分隔符是冒号。您可以通过FS 变量或命令行中的-F 更改AWK 中的字段分隔符。
在/etc/passwd/ 中,shell 列在第 7 个字段中。
好吧,在我写这么多的时间里,有两个人为你完成了你的功课。祝你好运!
【讨论】:
awk -F: '/\/bin\/bash$/{print $1}' /etc/passwd
【讨论】:
@OP,你可以使用 awk
awk 'BEGIN{FS=":"}$7~/bash/{print $1}' /etc/passwd
上述检查 bash,但不限于 /bin/bash。如果您确实需要 /bin/bash,请更改它。
或者告诉你的老师你只想使用 shell
#!/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"
【讨论】: