変数としてgrep

変数としてgrep

sudoを使用して、成功と失敗に関係なく、すべてのログインを監視するスクリプトを作成しようとしています。

今私にいます:

set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts

cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log

/var/log/secureで現在の日付を特定して発生した日付のエントリのみを取得するにはどうすればよいですか?

私が走るとき

cat /var/log/secure | grep 'Mar 18' | grep 'servername su'

コマンドラインから必要な結果を得ましたが、$ tdate変数で設定された現在の日付でgrepをスクリプトする方法がわかりません。

答え1

grep:のパラメータを引用する必要がありますgrep "$tdate"。これは$tdate、二重引用符を追加しない限り、2つのスペースで区切られた単語に拡張され、2つの引数としてgrepに渡されるためです。

無駄なcatの使用を排除し、grepを一度だけ呼び出すようにスクリプトを改善できます。

</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"

答え2

tdateそこにスペースがあります。したがって、grepは2番目の部分をtdateファイル名として扱います。$tdateこれが発生しないようにするには、二重引用符で囲む必要があります。コマンドは次のようにする必要があります。

cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log

関連情報