🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

date

dateは、date型や日付に関する関数や処理についてのタグです

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

1回答

2060閲覧

bash シェルですが、教えてもらえますか。

minam

総合スコア2

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

date

dateは、date型や日付に関する関数や処理についてのタグです

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2020/12/14 10:13

シェルスクリプトの作成しておりますが、エラーでずっと止まっています。
アドバイスいただけますでしょうか。

vi shell

!/bin/sh

TODAY=date +%Y/%m/%d

PAST_UPDATE=date -d 2020/06/30 +%Y/%m/%d

DUE_DAY=date -d ${PAST_UPDATE} '1 year 6 month' +%Y/%m/%d

BASICDATE=date -d ${DUE_DAY} -d '6 month ago' +%Y/%m/%d

LEFT_DAYS1=exprdate ${DUE_DAY} +%s - date ${TODAY} +%s

LEFT_DAYS2=expr date ${LEFT_DAYS1} +%s / 86400

if [ date -d ${TODAY} +%s -ge date -d ${BASICDATE} +%s ]
then
echo "更新を行ってください。
期限まで${LEFT_DAYS2}日です。"

fi

sh -x ./shell
++ date +%Y/%m/%d

  • TODAY=2020/12/14

++ date -d 2020/06/30 +%Y/%m/%d

  • PAST_UPDATE=2020/06/30

++ date -d 2020/06/30 '1 year 6 month' +%Y/%m/%d
date: extra operand ‘+%Y/%m/%d’
Try 'date --help' for more information.

  • DUE_DAY=

++ date -d -d '6 month ago' +%Y/%m/%d
date: extra operand ‘+%Y/%m/%d’
Try 'date --help' for more information.

  • BASICDATE=

++ date 2020/12/14 +%s
date: extra operand ‘+%s’
Try 'date --help' for more information.
++ date +%s

  • LEFT_DAYS1=expr1607907120

./shell: line 11: -: command not found
++ date +%s

  • LEFT_DAYS2=expr
  • 1607907120 / 86400

./shell: line 13: 1607907120: command not found
++ date -d 2020/12/14 +%s
++ date -d +%s
date: invalid date ‘+%s’

  • '[' 1607871600 -ge ']'

./shell: line 16: [: 1607871600: unary operator expected

./shell
date: extra operand ‘+%Y/%m/%d’
Try 'date --help' for more information.
date: extra operand ‘+%Y/%m/%d’
Try 'date --help' for more information.
date: extra operand ‘+%s’
Try 'date --help' for more information.
./shell: line 11: -: command not found
./shell: line 13: 1607907166: command not found
date: invalid date ‘+%s’
./shell: line 16: [: 1607871600: unary operator expected

こちらどのように修正した方がよろしいでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/12/14 10:14

なにをやろうとしてるんでしょうか というより、それをどうしたいんでしょうか?
minam

2020/12/14 10:40

失礼しました。 過去更新日から18ヶ月以内に更新をしなければいけないです。 なので更新期限日から6ヶ月前からアラームを表示したいです。 日にちの計算の方を+%s秒で換算し、計算を行い、秒→日に戻す方法を取りました。
guest

回答1

0

コードはコードブロックに書かないとちゃんと表示できません。
自分の投稿をみて、表示がおかしいと思わないのでしょうか???

date-dは、その直後の引き数が対象です。また、-dを複数使うと最後の物だけ有効です。

sh

1× date -d 2020/06/30 '1 year 6 month' +%Y/%m/%d 2○ date -d '2020/06/30 1 year 6 month' +%Y/%m/%d 3 4× date -d -d '6 month ago' +%Y/%m/%d 5× date -d 2020/06/30 -d '6 month ago' +%Y/%m/%d 6○ date -d '2020/06/30 6 month ago' +%Y/%m/%d

残りは、ちゃんとしたコードが書かれてから続けます。

投稿2020/12/14 12:27

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minam

2020/12/15 10:13

大変失礼いたしました。 色々試していて、整理になっていないまま載せてしまいました。 また、コメントが遅くなり申し訳ありません。 修正を行いました。 スクリプトや実行結果は以下となります。 $vi shell #!/bin/sh TODAY=`date +%Y/%m/%d` PAST_UPDATE=`date -d 2020/06/30 +%Y/%m/%d` DUE_DAY=`date -d "${PAST_UPDATE} 1 year 6 month" +%Y/%m/%d` BASICDATE=`date -d "${DUE_DAY} 6 month ago" +%Y/%m/%d` LEFT_DAYS1=expr `date -d "${DUE_DAY}" +%s` - `date -d "${TODAY}" +%s` LEFT_DAYS2=expr `date -d "${LEFT_DAYS1}" +%s` / 86400 if [ `date -d "${TODAY}" +%s` -ge `date -d "${BASICDATE}" +%s` ] then echo "更新を行ってください。 期限まで`${LEFT_DAYS2}`日です。" fi $./shell ./shell: line 11: 1640790000: command not found ./shell: line 13: 1607958000: command not found $sh -x ./shell ++ date +%Y/%m/%d + TODAY=2020/12/15 ++ date -d 2020/06/30 +%Y/%m/%d + PAST_UPDATE=2020/06/30 ++ date -d '2020/06/30 1 year 6 month' +%Y/%m/%d + DUE_DAY=2021/12/30 ++ date -d '2021/12/30 6 month ago' +%Y/%m/%d + BASICDATE=2021/06/30 ++ date -d 2021/12/30 +%s ++ date -d 2020/12/15 +%s + LEFT_DAYS1=expr + 1640790000 - 1607958000 ./shell: line 11: 1640790000: command not found ++ date -d '' +%s + LEFT_DAYS2=expr + 1607958000 / 86400 ./shell: line 13: 1607958000: command not found ++ date -d 2020/12/15 +%s ++ date -d 2021/06/30 +%s + '[' 1607958000 -ge 1624978800 ']' このような結果が出たということは、exprコマンドを使い際、``の使い方が悪かったためでしょうか。 よろしくお願いいたします。
otn

2020/12/15 10:15

↑このコメントを全部消して、 質問文を編集してコードブロックに書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問