• ベストアンサー

シェルスクリプトでうるう年判定

宜しくお願いします。 シェルスクリプトでうるう年かどうか判定するスクリプトを作りたいです。 プロンプトで西暦を入力したらその年がうるう年かそうでないか○×表示をさせたいです。 手を貸してください。 なにぶん素人でどこからどう手をつけていったらいいのか分かりません。。 ご教授お願い致します。

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

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

#!/bin/bash echo -n ">> " read in i4=`expr $in % 4` i100=`expr $in % 100` i400=`expr $in % 400` ans=`expr $i4 == 0 \& $i100 \!= 0 \| $i400 == 0` if [ $ans != 0 ] then echo "○" else echo "×" fi

326JAPAN
質問者

お礼

無事表示されるようになりました! ありがとうございます! また何かありましたら宜しくお願いします。

326JAPAN
質問者

補足

ありがとうございます! 早速実行してみたのですが、、、 結果が bash: echo×: command not found bash: echo○: command not found と結果がうるう年と違う年で上記のように表示されてしまいます。 コマンドが無いとはどういうことなのでしょうか? 何から何まですいませんがご教授お願いします。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.2

echo の後に空白を置かないで表示文字列を書いているのでは? 初心者が「書いてあるとおりにしてもうまくいかない」という90%以上はタイプミスです。

326JAPAN
質問者

お礼

ありがとうございます! ご指摘通りタイプミスでした。。

関連するQ&A

  • 西暦を入力して、うるう年かどうか判定せよ!という問題です。

    西暦を入力して、うるう年かどうか判定せよ。ただしうるう年の条件は4で割り切れる、100で割り切れない、400で割り切れる。という問題です!!誰か教えて下さい!お願いします~。

  • 閏年のプログラム

    C言語(閏年)の質問です。 任意の範囲の年から閏年の表示とその数をカウントして次の実行結果のように表示するプログラムの作成で途中まではわかって修正・追加する箇所があったら一緒に教えてください。(ここでは2つの年をmain関数内で入力し、その範囲の西暦を引数とする関数checkYearを使用するものとする。int型の関数checkYearは、引数に西暦をとり、その西暦が閏年であれば、1を返し、閏年でない場合は0を返す。) なお、閏年の判定方法は以下のとおりである。 条件1 西暦年が4で割り切れる年は閏年である 条件2 条件1を満たしていても、西暦年が100で割り切れるときは閏年でない 条件3 条件2を満たしていても、西暦年が400で割り切れるならば閏年である 実行例1 西暦を入力:2000 西暦を入力:2009 2000年 2004年 2008年 閏年は3回あります。 実行例2 西暦を入力:2100 西暦を入力:2000 2000年 2004年 2008年 2012年 2016年 2020年 (省略) 2096年 閏年は25回あります。 実行例3 西暦を入力:2090 西暦を入力:2110 2092年 2096年 2104年 2108年 閏年は4回あります。 #include <iostream> bool checkYear(int year); int main() { int year; int year2; printf("西暦を入力:"); scanf("%d",year); printf("西暦を入力:"); scanf("%d",year2); int count = 0; for (int i = year; i < year2; i++) { if (checkYear(i)) { printf("%d年\n"); count++; } } printf("閏年は%d回です。\n"); return 0; } bool checkYear(int year) { return (((year % 4) == 0) && ((year % 100) != 0)) || ((year % 400) == 0); }

  • 閏年について

    Excelで「1900/2/29」と入力すると、閏年でないのに、日付として認知され、標準表示形式では「60」と表示されます。1900年は閏年として認識しているのでしょうか?Visual Basicで西暦と和暦のプログラムを作成(1900年未満)している途中で計算が合わなくなり、この疑問にぶつかりました。回答をよろしくお願いします。

  • シェルスクリプトで困っています 2

    度々申し訳ございません。 現在、Linuxマシン1からLinuxマシン2へTelnetでログインし、Linuxマシン2上にあるシェルスクリプト(/bin/sh)を実行し、Linuxマシン2上のプログラムを実行した後、Linuxマシン2からログアウトするシェルスクリプトを作成中です。 その、Linuxマシン2からログアウトする際に、 "exit"を記述しているのですが、その"exit"がTelnetログアウトの意味で実行されず、シェルスクリプトを終了するの意味で実行されていて困っています。 どなたか上手くTelnetからログアウトできるようにシェルスクリプトを組む方法をご存知ではないでしょうか?もし判りましたらご教授下さい。 よろしくお願い致します。

  • シェルスクリプト trap処理につきまして

    シェルスクリプトを作成しておりますが、 正常に動作しないので、ご教授いただけますでしょうか。 以下、作成したスクリプトを記載いたします。 #!/bin/sh trap "echo 'stopped'" 1 2 3 15 echo start sleep 10 echo end 上記のようなスクリプトを作成し、trap処理のテストを 行いたいのですが、上記スクリプト実行中で 「Ctrl+C」を押して、処理を止めても trap処理の「stopped」が表示されません。 スクリプトが処理が終わり、 コマンド入力できるようになったところで、「Ctrl+C」を押すと 「stopped」が表示されます。 スクリプト内で処理を止めた場合に「stopped」を表示させることが出来ず、困っております。 どなたかご教授いただけますでしょうか。 宜しくお願い致します。

  • シェルスクリプトについて(POSIX)

    シェルスクリプトを書いていますが、思うように動きません。シェルにお詳しい方がいらっしゃいましたら、ご教授ください。以下のような仕様です。 1.Working dierctoryの中から目的のファイルを検索 2.検出されたファイルの内容を1行ずつ表示させる。 このような簡単な仕様なのですが、awkを使用する必要はありますでしょうか? シェルは初めてなので勉強不足なため、ここで質問するにあたり、情報が不足していましたら、どうぞ補足してください。宜しくお願い致します。

  • うるう年かどうかを計算するプログラミング

    西暦何年かを入力し、その年がうるう年かそうでないかを 計算するプログラムを作っています。 #include <iostream> using namespace std; int main() { int toshi; cout <<"西暦を入力してください"; cin>>toshi; if (toshi%4==0) {if (toshi%100==0) {if (toshi%400==0) {cout<<toshi<<"年はうるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";} else {cout<<toshi<<"年は非うるう年です。";}}} return EXIT_SUCCESS; } これを入力したのですが エラーが2つでてしまいます。 どこがちがうのでしょうか?

  • シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕

    シェルスクリプト(sh)の関数の戻り値とtestコマンドによる判定の仕方が分かりません。 -------------------------------------------------- #!/bin/sh . GetYesNo.sh          #外部シェルスクリプトを読み込んで... GetYesNo $1           #このGetYesNoの戻り値は0か1を出力するようにする。 if[ ??? -eq 0 ]; then      #"???"の部分に何を入力すれば良いか分かりません。 echo "真(0)です。" else echo "偽(0以外)です。" fi -------------------------------------------------- 戻り値が0か1しか出力しない外部シェルスクリプトを読み込んで、その戻り値をtestコマンドを利用して、0か1のどちらかを判定して、それぞれの出力を出したいけれど、どうやって出来ますでしょうか。 色々な方法を試してみましたが、ダメでした。 上記のコードの書き間違いがあると思いますが、あったらご指摘をお願いします。

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

    自分のLinuxマシン(PC1)から、イーサネットで繋がっているLinuxマシン(PC2)に、自動的にTelnetを用いてログインし、そこでいくつかの操作をするシェルスクリプトを作成中です。 Telnetでログインした後、PC2が持っているプログラムを走らせ、その結果を見て再度そのプログラムを走らせるか、次のプログラムへ移るかを、ユーザのキーボード入力にて判断可能なようにしたいと思っています。 "#!/usr/bin/expect"の、 "expect *** { send **** }"などを使えば、Telnetのような対話型アプリケーションに使えることが分かったのですが、ユーザからのキーボード入力を判定する方法が分かりません。。。 また、"#!/bin/sh"の、"read"コマンドを用いれば、ユーザからのキーボード入力を受け付けることが分かったのですが、Telnetなどをどう扱えばいいのかが分かりません…。 大変あいまいで、分かりにくい質問で申し訳ないのですが、どなたかお分かりになる方がいらっしゃればご教授ください。 分かりにくい点はいくらでも補足いたします。よろしくお願いいたします。

  • シェルスクリプトについて

    シェルスクリプトの勉強中です。 シェルで特定のフォルダに移動するスクリプトを書いているのですが、以下のような場合どうかいていけばいいのでしょうか? [例] /home/hogeの下にフォルダが1つだけある場合 sample01フォルダ →無条件でそのフォルダに移動する /home/hogeの下にフォルダが複数ある場合 sample01フォルダ sample02フォルダ sample03フォルダ →自分で選択して任意のフォルダに移動する  sample02と打ち込めばそこに移動出来るようにしたいです。 hoge配下のフォルダ名が不規則で定まっていない為、 複数ある場合にだけ選択リスト的なものを表示させて、間違えないように 移動させたいなと考えてます。 いい案などありましたら、ご教授いただけますと助かります。 よろしくお願い致します。