質問

[OK]を、ので、私は、HP-UXでのkshていいのlinux&bashの設定からスクリプトを変換する必要があります。一人ひとりのコマンドは、異なる構文を期待し、私は自分自身を殺したいです。しかし、のは暴言をスキップさせます。

これは私のスクリプトの一部である

anterior=`date +"%Y%0m" -d '1 month ago'`

私は基本的にフォーマット201002で過去の日付を取得する必要があり、実際に他の一つに、それは「はい、上のゼロを入れてください意味しながら、新しい環境では、%0メートルは、「何のゼロ」を意味しない、という事を気にしません私の文字列」。それも、「1ヶ月前に」受け入れません。私は、HP-UXのマニュアル日付を読んで、あなたがそれで日付の計算を行うことができないようです。

私はしばらくの間、周りを探してきたが、私は見つけることすべてが長いソリューションです。私はかなりの日付を追加するような一般的な管理タスクはそんなに大騒ぎを必要としていることを理解することはできません。私のワンライナー、まあ、私は知らないために、別のものを変換する方法はありませんか?さあ、私は、BCを使用する30本のプラス線と全てのスクリプトを超えるマジックナンバーを持っていた提案されたソリューションを見てきました。最も簡単な解決策は、Perlを使っているようだ...しかし、私は、彼らは非常に難解だとして、それらを変更する方法を知りません。

ありがとうございます。

役に立ちましたか?

解決 3

これは私が(警告に来たソリューションです:私は、厳格なセキュリティ対策とクライアントで働いていますが、そう、私はそれらをテストするためにシステム管理者に自分のスクリプトを送信する必要があり、私もそれをテストする方法がありません。そして彼を通してデバッグ)。

typeset -Z2 lastmonth
month=`date +%m`
year=`date +%Y`

lastmonth=$((month-1))
if (( month == 1));then
lastmonth=12
year=$((year-1))
fi

とにかく、それはそれを行うには簡単な方法がないことを私を打つます。

他のヒント

あなたは年と月の単純なケースであるため、

、あなたは常にあなた自身の日付の配列を作成する可能性があります。例えば、

year=`date +%Y`
month=`date +%m`
anterior=`awk -vm="$month" -vyr="$year" 'BEGIN{
  mth["01"]="12"; mth["02"]="01"
  mth["03"]="02"; mth["04"]="03"
  mth["05"]="04"; mth["06"]="05"
  mth["07"]="06"; mth["08"]="07"
  mth["09"]="08"; mth["10"]="09"
  mth["11"]="10"; mth["12"]="11"
  if ( m=="01") { yr-- }
  print yr mth[m]
}' `
echo $anterior

しかし、それは唯一のシンプルであり、唯一の以前の1ヶ月生産するのに役立つことに注意してください。 また、kshのスクリプト<のhref = "http://www.unix.com/unix-dummies-questions-answers/4870-days-elapsed-between-2-dates.html" のrel = "nofollowをnoreferrer" を試すことができます>ここの

私は、これは古いトピックです知っているが、私は同じ問題を抱えていたし、これは解決しました

シェルスクリプトを作成し、例えば、last_month.sh

year=`date +%Y`
month=`date +%m`

month=`expr $month - 1`

if [ $month -eq 0 ]; then
   month=12
   year=`expr $year - 1`
fi

if [ $month -lt 10 ] then
   month="0$month"
fi

echo $year$month
exit 0

あなたはスクリプトを呼び出し、変数に割り当てることができます。

./last_month.sh | read anterior
echo $anterior

ここで、先月は返しますが、あなたは簡単にパラメータを受け入れるように変更することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top