• ベストアンサー
  • すぐに回答を!

UNIX Cシェルで実数の比較

UNIX Cシェルで実数の比較がしたいのですが、 うまくいきません 以下のような結果になります。 うまく判定するにはどうすればよいのでしょう #!/bin/csh -f set CONSIZE=-0.01 echo "CONSIZE = $CONSIZE" @ CONSIZE = $CONSIZE if( $CONSIZE < 0.0 )then echo " 0以下;;; $CONSIZE" exit endif 実行 CONSIZE = -0.01 @: 数値形式が正しくありません。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1183
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • psyren
  • ベストアンサー率46% (7/15)

整数しか扱えない為、そのままでは比較することができないようです。 bc を利用してみてはいかがでしょうか? #!/bin/csh -f set CONSIZE=-0.01 echo "CONSIZE = $CONSIZE" set x = `echo "scale=3;if( $CONSIZE < 0 ) 1" | bc` if( $x == 1 )then echo " 0以下;;; $CONSIZE" exit endif

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 早速、実行してみました。 問題は解決です。 ありがとうございます。

関連するQ&A

  • シェルプログラムの判定について

    皆さんのお知恵をお貸しください シェルはcshです 目的set name = $<で$nameに入る文字が+-*/(一文字毎です)の時エラー処理をしたい 現状下記のプログラムですが判定出来ません set xx = $< set moji = `grep -c '[\-\+\*\/]' xx` if ( $moji == 1 ) then echo 文字に誤りがあります endif  else if ( $moji == 0 ) then echo OKです endif +-*/が入った時にエラーを出したいのですが+-*/をどう判定したらよいのか教えて頂けます様お願い致します。

  • Cシェルでの文字列大小比較

    Cシェルで set AA="aa" set BB="bb" if( $AA > $BB )then echo "$AA > $BB" endif というような判定がしたいのですが、 上記の場合、”if: 条件式構文が正しくありません”というエラーが出力されます。 Cシェルの場合、文字列の比較は ifでイコールかノットイコールかは判定できますが、文字コードの大小比較が出来ないようですが、 文字列の大小比較をするにはどうすればよいのしょうか

  • UNIXでテキスト→PS→印刷なコマンド

    UNIXを勉強中です。 テキストファイルをPSファイルにして、すぐに印刷してくれるようなUNIXスクリプトを書いたつもりなのですが、どうもうまく行きません。 どこが間違っているのでしょう。 ちなみにプリンタはlp4160です。 #!/bin/csh -f if($#argv != 1)then echo "テキストファイルをPSファイルにして印刷します。" echo "ファイル名を指定します。" exit 1 endif a2ps -f9.8 $1 | lpr -Plp4160

  • シェルの配列

    シェルで2つの配列の同じ位置の文字を同時にチェックしようとして以下のコードを組みましたが、上手くいきません。$dd中の文字が配列として扱われていないのはなぜだか教えていただけますか? #! /bin/csh -f set AA="18" set BB="20" set cc = "11 12 18 19" set dd = "24 22 20 21" @ idx = 1 foreach h_code ( $cc ) echo [$AA][$h_code][$BB][$dd[$idx]]     # ccの1個目とddの1個目をそれぞれ$AA,$BBと比較 if( $AA == $h_code && $BB == $dd[$idx] ) then echo "OK" endif @ idx++ end

  • UNIXシェルIF判定について

    こんばんは。 以下のUNIXシェルIF判定を理解できません。 #!/usr/bin/csh if ($ENV_ID != -) goto $ENV_SKIP_ID ここでのIF判定で「-」とは何を意味するのでしょうか? 「-」でなければ「$ENV_SKIP_ID」までスキップさせています。 「-」とは…? ご教授の程、宜しくお願い致します。

  • NTのバッチを会話形式にしたい

    WindowsNT4.0(SP6)で、バッチファイルを作ろうと思っています。 会話形式で標準入力からの入力待ちで処理を止めたいのですが、どうしたらいいのでしょうか? Solarisなら下のような感じなのですが、Windowsではどうやったらいいのかわかりません。 どうか教えてください。 Solaris(csh)の場合・・・ #!/bin/csh echo -n "年齢入力" set innum=$< # if ($innum < 19)then echo "あなたは成人ではありません" else echo "あなたは成人です" endif exit

  • シェルの変数セットについて

    どなたか教えてください。 以下のようなUNIXのシェルを作ってみたのですが変数がうまくセットされません。 これは仕様なんでしょうか??? シェルはkshでシェルの中でsuしているユーザはcshです。 例: ==test.sh== #!/bin/ksh A1="test test" su - user1 <<EOF echo "A1 :" $A1 set A2 =(test test) echo "A2 : " $A2 EOF exit ==実行結果== %./test A1 : test test A2 : %

  • UNIXのシェル

    シェルに関して質問です。 0526とか0525のところは一日ごとにフォルダが作成されます。 unix\yasu\0526\hobby\test.txt unix\yasu\0526\hobby\test.txt unix\tomo\0525\hobby\test.txt unix\tomo\0525\hobby\test.txt ./check.sh MMDD 実行するときにMMDDのところに日付を入れてフォルダがあればコマンド1を実行するようにしたいです。 引数に指定した文字を判定するにはどうしたらいいのでしょうか? よろしくお願いします。 ----------------------------- #シェルの名前は「check.sh」です #! /bin/sh if [ $1 = "日付" ] ; then コマンド1 else コマンド2 fi -----------------------------

  • cshの条件式について教えてください

    cshで該当ディレクトリにファイルがなければOK、あればエラーというような処理をしようと思っています。 しかし、下記のような記述ではうまくできません。 1) *************************** if ( -e $DIR/*.* ) then echo "NG" exit 1 else echo "OK" endif exit 0 *************************** if文でなく、外にだせばうまくいくのですが... 2) *************************** test -e $DIR/*.* if($status == 0) then echo "NG" exit 1 else echo "OK" endif exit 0 **************************** if ( test -e $DIR/*.* ) then... でもだめでした。 どうにかしてif文で一発判定をしたいと思っているのですが、正しい記述方法を教えてください。 よろしくお願いします。

  • シェルの中からシェルを呼び出して判定

    UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。