我将所有行作为输出。以下代码的 if 条件不起作用。
grep -Ev '^(halt|sync|shutdown)' /etc/passwd | awk -F: '{\
if("$7"!="$(which nologin)") \
{ print $0; } \
}'
我尝试了不同的 if 条件:
这也返回所有值。
if("$1"!="usbmux") \
{ print $1; } \
但即使 $1 中有一个 usbmux 条目,这也不会返回任何内容。
if("$1"=="usbmux") \
{ print $1; } \
答案1
在 中awk
,不要引用变量。
awk -F : '$1 == "usbmux"'
这将打印所有第一个:
-delimited 字段正好是字符串 的行usbmux
。如果没有与条件关联的明确操作,则默认操作是打印当前记录(默认为行)。
awk -F : -v string="$( command -v nologin )" '$7 == string'
这将打印第 7 个:
分隔字段是实用程序路径的所有行nologin
。该awk
变量string
设置为command -v nologin
命令行上的输出-v
。
awk -F : -v string="$( command -v nologin )" '$1 !~ /^(halt|sync|shutdown)$/ && $7 == string'
halt
这与上面的命令的作用相同,但它避免了第一个字段是,sync
或之一的行shutdown
(不使用grep
)。
我曾经command -v nologin
获取实用程序的路径nologin
而不是which
,请参阅“为什么不用“哪个”呢?那该用什么呢?”为什么。