• 締切済み

bash 日付の比較でエラー

いつもお世話になっております。 表題についてご教授願えないでしょうか。 エラーは [: -ge: unary operator expected プログラムは date1=20130414 date2=20130419 if [ $date1 -ge date2 ] then; echo "test" fi 上記のようなプログラムがあって TRUEなら処理をします。 結果はFALSEなのですが、 上記のようなアラートがでてしまいます。 変数はNULLでないので、比較ができると思ってるのですが、 bashはやった事ないので、ご教授頂ければ幸いです。

  • prr4e
  • お礼率48% (66/136)

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

> if [ $date1 -ge date2 ] then; ・date2の前に$がない ・セミコロンの位置が違う

prr4e
質問者

補足

返答ありがとうございます。 申し訳ありません。 記述ミスです。 data2 → $data2 です。 セミコロンの位置は他と合わせてるんですが、 他は問題なく動作しています。 実際はセミコロンと] の間に半角スペースが必要なのでしょうか。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> if [ $date1 -ge date2 ] then; date2に$は必要ないのかな?

prr4e
質問者

補足

返答ありがとうございます。 申し訳ありません。 記述ミスです。 data2 → $data2 になります。

関連するQ&A

  • CentOSでアップデート中に再起動してエラー発生

    現在CentOS5を使用しているのですがアップデート途中に再起動をしてしまった為、起動中にエラーが発生して止まってしまいます。 復旧方法があれば教えて頂きたいのですが・・・エラーの内容は bash: dircolors: command not found bash: /usr/bin/id: No such file or directory bash: [: =: unary operator expected bash: /usr/bin/id: No such file or directory bash: [: =: unary operator expected bash: /usr/bin/pkg-config: No such file or directory と表示されます、宜しく御願いします。

  • 日付の比較をしたい。

    質問させてください。 半角8文字の日付「20080517」を 今日の日付と比べて、小さければfalse 大きければtrue、といったプログラムを作成したいのですが、 どなたかアドバイス、いただけませんか。 プログラムはこんな感じで出来たらと思っています。 if(今日 <= 20080517) { alert("大きいです"); } こんな感じです。どうぞ宜しくお願いします。

  • bashのif文で構文エラー:

    bashで時間の比較によっての分岐を考えています。 ネットで検索しながらif構文を下記のようにしてみているのですが、 行 10: 構文エラー: 予期しないファイル終了 (EOF) です となってしまいます。 どなた様かお教え願えませんでしょうか #!/bin/bash DATA=`date +%-H%M` if [ $DATA -gt 600 ];then echo "$DATA" else echo "NG" fi 

  • bashスクリプト

    bashスクリプト #!/bin/bash if [ -f *.log ]; then  echo `tar czf $(date +"%Y_%m_%d").tar.gz *.log` fi このようなスクリプトでecho ``(バックオート)でコマンドを実行できると思うんですが, tar czf $(date +"%Y_%m_%d").tar.gz *.log←これ自体を表示できないでしょうか? いまは,以下のようにしてコマンドを実行させ,さらに表示させています. これだとあまり賢くないというか,1行でスマートに表示させたいのですが, 可能でしょうか? if [ -f *.log ]; then  echo "tar czf $(date +"%Y_%m_%d").tar.gz *.log"  echo `tar czf $(date +"%Y_%m_%d").tar.gz *.log` fi

  • ログイン時にエラーメッセージが出ます。

    redhatlinux(2.4.18-14)で、telnetでログイン時に以下のようなメッセージが出るようになってしまいました。 ************************* -bash: id: command not found -bash: [: =: unary operator expected -bash: id: command not found -bash: dircolors: command not found -bash: id: command not found -bash: id: command not found -bash: id: command not found -bash: [: too many arguments ************************* そもそも、昨日boot中に誤って電源を落としたことが影響しているような気がします。が、なぜかパスが通っていないため、manページも見られませんし、viも使えない状況です。こういう場合どうすればよいのでしょうか? 初歩的な質問かと思いますが、よろしくお願いします。

  • 一般ユーザログイン時実行権限無くなった

    SSHでログインして、下記エラー発生しました: Last login: Thu Jan 14 11:19:50 2010 from XXXX -bash: /usr/bin/id: Permission denied -bash: [: =: unary operator expected -bash: id: command not found -bash: id: command not found 色々調べて、/etc/bashrcにのIF文ところで上記エラー発生しております。 if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi でも、どうやって直すのは、なかなか分かりませんでした。 でも、rootユーザ場合は、エラーが出ませんです。 ちなみに、使ってのOSはCentOS5.4です。 この問題ご存知の方いらっしゃいましたら、教えていただけませんか?

  • 日付について

    なぜ同じではないのでしょうか? MsgBox Year(Date) & "/01/13" = Date If Year(Date) & "/01/13" = Date Then MsgBox Year(Date) & "/01/13" = Date End If を実行するとFalseが返ってきます。 MsgBox Year(Date) & "/01/13"は「2009/01/13」 Dateは「09/01/13」 です。 桁数が違うからできないのでしょうか?. これはどちらかが日付型と認識されていないのでしょうか? これをTrueを返すにはどうすればいいでしょうか? よろしくお願い致します。

  • シェルスクリプトのYes、Noの入力ロジックに関する質問

    こんにちは。 よろしくお願いします。 Linux(RHEL5)にて、以下のようなシェルスクリプトを作成しました。 ユーザにアンインストールを問い合わせるもので、 yesの時は処理が進み、noの時は処理が中断、 それ以外を入力した場合、再入力を促すようにしています。 echo "" echo "*** アンインストールを実行しますか? ***" read -p "  >>> 実行する場合「yes」、しない場合は「no」を入力してください <<< " YESNO while (test $YESNO != yes) && (test $YESNO != no) do echo "" read -p "  >>> 「yes」もしくは「no」を入力してください <<<  " YESNO done if (test $YESNO == yes) then continue else echo "****** アンインストールをキャンセルしました ******" && exit fi しかし、 何も入力せずに「Enter」を押した場合、 本来なら、再入力を促すように表示したいのですが、 以下のようにエラーが出て、終了してしまいます。 XXX.sh: line YYY: test; !=; unary operator expected XXX.sh: line ZZZ: test; ==; unary operator expected ****** アンインストールをキャンセルしました ****** 恐らくロジックのどこかに見落としがあると思うのですが、 原因がよく分かりません。 よろしくお願いします。

  • シェルスクリプトのYes、Noの入力ロジックに関する質問

    こんにちは。 よろしくお願いします。 Linux(RHEL5)にて、以下のようなシェルスクリプトを作成しました。 ユーザにアンインストールを問い合わせるもので、 yesの時は処理が進み、noの時は処理が中断、 それ以外を入力した場合、再入力を促すようにしています。 echo \"\" echo \"*** アンインストールを実行しますか? ***\" read -p \"  >>> 実行する場合「yes」、しない場合は「no」を入力してください <<< \" YESNO while (test $YESNO != yes) && (test $YESNO != no) do echo \"\" read -p \"  >>> 「yes」もしくは「no」を入力してください <<<  \" YESNO done if (test $YESNO == yes) then continue else echo \"****** アンインストールをキャンセルしました ******\" && exit fi しかし、 何も入力せずに「Enter」を押した場合、 本来なら、再入力を促すように表示したいのですが、 以下のようにエラーが出て、終了してしまいます。 XXX.sh: line YYY: test; !=; unary operator expected XXX.sh: line ZZZ: test; ==; unary operator expected ****** アンインストールをキャンセルしました ****** 恐らくロジックのどこかに見落としがあると思うのですが、 原因がよく分かりません。 よろしくお願いします。

  • シェルでsyntax errorがでてしまう

    温度管理をするため、CentOS4.4上で下記のようなスクリプトを動かしています。 ---スクリプト始まり--- #!/bin/bash date=$(date '+%Y/%m/%d(%a)/%R') rh=$(/var/usbrh/usbrh -1 2>&1) limit=35 rh_judge=$(echo $rh | cut -c14-15) if (( ${rh_judge} >= ${limit} )) ;then alert=alert else unset alert fi echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log ---スクリプト終わり--- このスクリプトで、ログを出力し、limit以上の数値になった場合、alertがログに書き込まれるようにできました。 そこでコレを少し改良してalert時にメールを飛ばせる様にしたいと思い下記のようにif文を差し替えました。 ---if文始まり--- if (( ${rh_judge} >= ${limit} )) ;then alert=alert address="xxx@hogehoge.com" subject="TemperatureAlert" mail -s $subject $address << END `$rh` END else unset alert fi ---if文終わり--- ところが、 echo ${date} ${rh} ${alert} >> /var/usbrh/usbrh_tes2.log のあとの行(line23)で line 23: syntax error: unexpected end of fileというのが出て スクリプトが動かなくなってしまいました。 ログの書き込み部分は問題ないと思うのですが、原因がわかる方いらっしゃいますでしょうか。 ご指摘頂ければ幸いです。 宜しくお願いいたします。

専門家に質問してみよう