Bashファイル内のコマンドで変数を使用する方法

Bashファイル内のコマンドで変数を使用する方法

私はRedhat Linux Server 8.8でこのコマンドを直接使用しており、うまく動作し、望ましい結果を得ます。

grep '01-FEB-2024' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }'

Bashファイルを使用してこのプロセスを自動化する必要があり、current_date変数の値を取得できないようです。

#!/bin/bash
current_date=$(date "+%d-%b-%Y")
grep '$current_date' /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep "$current_date" /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out
grep $current_date /u01/app/server1/listener_scan/trace/listener_scan.log | awk '{ if ( $NF != 0 ) print $0 }' >> y.out

これらすべての場合はnullを返します。よろしくお願いします。

ベストアンサー1

date +%d-%b-%Y日付を0から長さ2までパディングし、年を0から4桁までパディングして現在の日付を出力します。

コマンドを実行する人によっては、次のような結果が得られます。

06-فبر-2024
06-лют-2024
06-fév-2024

C/POSIX ロケールでは、次のようになります。

$ LC_ALL=C date +%d-%b-%Y
06-Feb-2024

ログには同じ内容が含まれていますが、大文字のようです。

ここでは、次のことができます。

#! /bin/sh -
TODAY=$(LC_ALL=C date +%d-%b-%Y) exec awk '
  BEGIN{today = toupper(ENVIRON["TODAY"])}
  index($0, today) && $NF != 0
  ' /u01/app/server1/listener_scan/trace/listener_scan.log

mawk、busyboxはこの情報を独自に取得できるawkため、gawkLinuxベースのシステムでも機能する可能性が高くなります。

#! /bin/sh -
LC_ALL=C exec awk '
  BEGIN {today = toupper(strftime("%d-%b-%F"))}
  index($0, today) && $NF != 0
  ' /u01/app/server1/listener_scan/trace/listener_scan.log

(これはログファイルの内容がテキストにデコードされる方法にも影響しますが、おそらく最善です。これはエラーメッセージの言語にも影響します。)

おすすめ記事