質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

3回答

3342閲覧

【シェルスクリプト】処理の始まりと終わりの日付をユーザに入力させる処理。

退会済みユーザー

退会済みユーザー

総合スコア0

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2016/12/19 09:34

編集2016/12/19 09:35

Windows7のGit Bash上のシェルスクリプトでの処理です。

ユーザに始めと終わりの日付をyyyy-mm-ddの形式で入力してもらいその期間の集計を行うというものです。
集計の処理はすでにあるので開始日と終了日を入力するだけなのですがうまくいきません。

スクリプトは初心者で人の書いた物をいじっているので全く見当違いのことをしているかもしれませんがご了承ください。

#開始日の日付を入力 echo -n "Please Enter the Firest Date (yyyy-mm-dd)" read firstdate #終わりの日付を手入力か今日の日付にする echo -n "End Date is Today?[y/n]" read ans #yの場合今日の日付、nの場合手入力 case $ans in [yY]) enddate = date '+%Y-%m-%d';; [nN]) echo -n "Please Enter the End Date (yyyy-mm-dd)" read enddate;; *) enddate = date '+%Y-%m-%d';; esac ST = firstdate ED = enddate

最終的にSTに開始日、EDに終了日が入れば処理が動くと思うのですが上記のような記述で実行すると

ST:command notfound ED:command not found

というようなエラーが吐かれておりST,EDがコマンドと認識されているような状態です。

基本を学んでいないので全くおかしなことをしていたら恥ずかしいのですがどうか解決策を教えてください。。。

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

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

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

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

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

guest

回答3

0

ベストアンサー

このソースからだけではわからないですが、「ST」「ED」という変数に値をセットすれば他の部分で集計の処理をしてくれる、ということでしょうか?
だとすると、シェルスクリプトで変数に代入を行う場合は間にスペースを挟んではいけません
スペースを挟むとスクリプトはうまく認識してくれません

ちなみにその変数をスクリプト内で扱う場合には$を変数名の前に入れる必要があります
よって今回の場合では

ST=$firstdate ED=$enddate

このようになおすと、うまくいくのではないでしょうか?

投稿2016/12/19 10:07

luna12

総合スコア47

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

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

退会済みユーザー

退会済みユーザー

2016/12/20 00:20

ありがとうございます! スペースはついつい別言語の習慣で入れてしまっていました。 このスクリプトはもともとST,EDに固定値が入っており集計を行うたびに.shファイルの編集を行っていたのですがそれが面倒なので手入力で行えるようにしたいということで自分が手直しを行っていました。。。 シェルスクリプトは全く書いたことがなくggりながらそれっぽく書いてみたのですが、すごく初歩的なミスでお恥ずかしい限りです。。。
guest

0

他の方とかぶりますが…

  1. 値の代入をする場合、イコール記号の前後に空白をいれてはいけません。

※空白があるのでSTやEDがコマンドと解釈されます
2) 変数を参照する場合はドルマークをつけます。

ST=$firstdate
  1. コマンドの実行結果を代入する際はバッククオート記号で囲みます。
enddate=`date '+%Y-%m-%d'`

参考までに、自分だったらということで…

#開始日の日付を入力 echo -n 'Please Enter the Firest Date (yyyy-mm-dd)' read firstdate #終わりの日付を手入力か今日の日付にする echo -n 'Please Enter the End Date (yyyy-mm-dd or Enter)' read enddate if [ "$enddate" -eq '' ] then enddate=`date '+%Y-%m-%d'` fi echo 'First Date = '$firstdate echo 'End Date = '$enddate

投稿2016/12/19 11:12

編集2016/12/19 11:24
takasima20

総合スコア7458

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

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

0

なんか編集の処理ができないのでこっちで追記

追記:
変数であるST,EDを$なしで扱えるのは最初の宣言時のみです
よって最初のみ$は必要ありません
ちなみにシェルスクリプトでは型の宣言も、必要ありません

投稿2016/12/19 10:11

luna12

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問