すべてのラインを出力として取得します。次のコードの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"'
これにより、最初の:
区切りフィールドが正確に文字列であるすべての行が印刷されます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
「which」を使わないのはなぜですか?それでは何を使うべきですか?「なぜ。