「1ヶ月前」の日付はAIXでは機能しません。

「1ヶ月前」の日付はAIXでは機能しません。

マシンA(Oracle Linux Serverバージョン6.4を実行)では、次のコマンドを使用して1ヶ月前の日付をインテリジェントにインポートできます。

$(date -d"1 month ago" '+%Y0%m')

ただし、マシンB(AIX)では機能しません。これを達成する他の方法はありますか?.shファイルで次を実行します。

sh Test.sh

エラーはコンピュータBに表示されます。

date: illegal option -- d
Usage: date [-u] [+Field Descriptors]

答え1

シェルに関するものではなく、dateコマンドに関するものです。このオプションは、このコマンドのGNU実装-dにのみ適用されます。 GNU以外のシステムでは、GNUバージョンを別のパッケージ(おそらく...のように)としてdateインストールしないと機能しません。dategdate/opt/gnu/bin/date

ksh93の最新バージョンには、同様の機能を持つ組み込みコマンドがありますprintf

printf '%(%Y%m)T\n' '1 month ago'

zsh日付操作サポートが組み込まれている他のシェルも参照してください(strftime組み込みモジュールzsh/datetime))。

他のdate実装には日付調整機能もあります。たとえば、BSDを使用すると、date次のことができます。

date -v -1m +%Y%m

AIXには日付計算を実行するためのコマンドが含まれており、POSIXツールボックスにはコマンドがないため、標準/移植可能なコマンドがないことはわかりません。手動で復元perlまたは計算できます。

eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 1))
[ "$m" -gt 0 ] || m=12 y=$((y - 1)) # January case
printf '%d%02d\n' "$y" "$m"

答え2

date -d...AIX / kshでは機能しないため、AIXで完全に機能する以下を使用してください。

TZ=aaa$(expr $(expr `TZ=aaa24 date +%d` + 1) \* 24) date +%m

関連情報