• ベストアンサー

シェルスクリプト:N日前の日付の取得

#/bin/sh DAY=$1 TIME=`date --date '"$DAY" day ago' +%Y%m%d` echo $TIME 上を実行しても$DAYが展開されず、 date: invalid date '"$DAY" day ago' と、dateコマンドがエラーを返してきます。 $DAYを展開させるためにはどうクォートすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.1

#/bin/sh DAY=$1 TIME=`date --date "$DAY"' days ago' +%Y%m%d` echo $TIME これではどうでしょうか?

ssaass
質問者

お礼

ありがとうございました. 見事に解決できました. DAY=3だとすると date --date 3' days ago' +%Y%m%d が実行されているわけですよね? これをコマンドラインからたたいてみるとちゃんと値を返してくるので正常に動いてはいるようですが, 3' days ago' というオプション指定がどうもしっくりこないもので・・・.

関連するQ&A

  • shで書いたシェルスクリプトで`とか'とかの中で変数を使いたい。

    標題の質問ですが、gnu dateコマンドを使って数日前の日付を取得しているのですが、 こんな具合: DATE=`date --d '1 day ago'` 何日前の日付を取得するかを引数で決めたいのです。 しかし DATE=`date` --d '$1 day ago'` これでは当然上手く行きません。 上手いことエスケープして変数を使用する方法を教えてください。 シェルはshです。

  • 31日前の日付はいつ?

    #!/bin/sh d=`date +%Y%m%d` 以前に、このシェルで今日の日付を取り出す方法を教えていただいたのですが、 この日付を元に、31日前の日付を取り出す方法はありますでしょうか?

  • dateコマンドで一日前の日付を出したい

    Linuxにおいて、4月1日に出力されたファイルが3/31の内容を含んでいるため、一日前の日付でファイルの転送を実施しようと考えております。 任意のファイルのタイムスタンプを「honjitu」に格納し、 ①honjitu=`date -r file1 +%Y%m%d` 次に「honjitu」の一日前の日付を「kyou」に格納したいです。 ②kyou=`date -d ${honjitu} '-1 day' +%Y%m%d` といった感じで実行しますと以下が表示されます。 date: invalid option -- '1' Try 'date --help' for more information. ②をどのように修正すれば、思った通りにいきますでしょうか。 ご教示よろしくお願いいたします。

  • シェルにて日付計算して値を取得したい

    シェルにて日付計算して値を取得したい A = 'date -d "1 days ago" + "%Y%m%d"' B = Aの2ケ月前を設定したい 悩んでいるところ↓ 上記のように、システム日付に1日前を変数Aへ格納して、その変数Aの2ケ月前を求めるには、どのようにしたらよいのでしょうか?

  • シェルスクリプトの問題で困っています!

    シェルスクリプトの問題を解いているのですが、いまいち分かっていないところが多いです… X 年からY 年までのカレンダーをファイル(cal-年.txt)に出力するシェルスクリプト(mkcal.sh)を 作成せよ。 実行書式./mkcal.sh x y [必須項目] 1. ファイル作成と同時にメッセージを出力し,作成したファイルが分かるようにすること。 出力例 ./mkcal.sh 2010 2012 Making cal-2010.txt Making cal-2011.txt Making cal-2012.txt 2. 作成しようとしているファイル(cal-XXXX.txt)が既に存在する場合には,エラーメッセージ File exists: cal-XXXX.txt を表示して,ファイルを作成しないこと。 出力例(cal-2011.txt が存在する場合) ./mkcal.sh 2010 2012 Making cal-2010.txt Making cal-2011.txt File exists: cal-2011.txt Making cal-2012.txt [自由項目] 1. mkcal.sh の引数を3 つ与えて実行すると,z 年飛ばしでカレンダーを出力すること。 実行書式./mkcal.sh x y z という問題に対し #!/bin/sh n=$1 while [ $n -le $2 ]; do echo "Making cal-$n.txt" /usr/bin/cal $n > cal-$n.txt n=`expr $n + 1` done #!/bin/sh n=$1 while [ $n –le $2 ]; do echo "Making cal-$n.txt" if [ -f "cal-$n.txt" ]; then echo "File exists: cal-$n.txt" else /usr/bin/cal $n > cal-$n.txt fi n=`expr $n + 1` done #!/bin/sh n=$1 while [ $n –le $2 ]; do echo "Making cal-$n.txt" if [ -f "cal-$n.txt" ]; then echo "File exists: cal-$n.txt" else /usr/bin/cal $n > cal-$n.txt fi n=`expr $n + $3` done とやっているのですが、どこで保存をすればいいか、そもそもの保存をするコマンドが分かっていない、これは合っているのか…と色々と問題点があります 誰か助けてください…お願い致します

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • 3日以前のバックアップを削除する

    /etc/crontabで以下のbackup.shを毎晩実行するのですが、 3日以前のものは毎回消していく場合は以下のような、 少し初心者的な書き方しか現在分からないのですが、 他にもし良い書き方があれば、教えていただけますでしょうか? よろしくお願いします。 #!/bin/sh DATE_1=`date -d '1 day ago' +%Y%m%d` DATE_2=`date -d '2 days ago' +%Y%m%d` DATE_3=`date -d '3 days ago' +%Y%m%d` if [ test_$DATE_2.tar.gz ]; then mv -f test_$DATE_2.tar.gz test_$DATE_3.tar.gz fi rm -f test_$DATE_3.tar.gz if [ test_$DATE_1.tar.gz ]; then mv -f test_$DATE_1.tar.gz test_$DATE_2.tar.gz fi if [ test.tar.gz ]; then mv -f test.tar.gz test_$DATE_1.tar.gz fi tar zcvf test.tar.gz /usr/local/test

  • シェルスクリプトの内容の確認

    Solarisのスクリプトについて教えてください。 以下のスクリプトファイルが登録されており、その内容の詳細を確認したいと思っております。 (1) 5行目の "$1" は何を意味しているのでしょうか? (2) 12行目の 「echo 」文内に「{ start | stop }」と記述がありますが、この start / stop はどの情報を元に判断して結果が出力されるのでしょうか? (3) 12行目の 「echo 」文のコマンドの後に、13行目「exit 1」と14行目「;;」がありますが、 これはどちらの行でcase文を抜けるということになるのでしょうか? ========================================================================================= #!/bin/sh # # /etc/init.d/nodemanager.sh # case "$1" in start) if [ -f /home/bea81/weblogic81/server/bin/startNodeManager.sh ] ; then /bin/su - weblogic -c 'cd /home/bea81/weblogic81/server/bin;./startNodeManager.sh &' fi ;; *) echo "Usage: /etc/rc2.d/S99nodemanager{ start | stop }" exit 1 ;; esac exit 0 ========================================================================================= よろしくお願いいたします。

  • シェルスクリプト内での四則演算

    非常に基本的な事だと思うのですが、どうしても解決できないので質問させてください。 シェルスクリプトで四則演算をしたいです。expr を使って下記の通りに書きました。 ---------------- #!/bin/sh echo $1 echo $2 AA='expr $1 + $2' echo "$AA" ---------------- これを test.sh として保存し、 $ sh test.sh 1 2 と試してみると、出力が ---------------- 1 2 expr $1 + $2 ---------------- となります。最後の行は 3 になってもらいたいのですが。 ちなみに、普通にコマンドプロンプトで $ expr 1 + 2 とやれば 3 と出てきます。 環境は Ubuntu 9.04 よろしくお願いします。

  • ○日前、○ヶ月前の日付を求めるコマンド

    Linuxコマンドに関する質問です。 date +%y%m%d にて今日の日付が6桁の数字で表されると思いますが、 前日、前月、また数ヶ月前の日付を求めるコマンドを調べています。 検索したところ date -v1d '+%y%m%d' で前日の日付を求められるという情報があったのですが これを試しても"-vというオプションは無い"と怒られます。 お分かりになる方がいましたらお教えください。

専門家に質問してみよう