プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
宜しく御願い致します。

if文で数値判断により条件分岐をしようと思ってます。

条件は”0<変数<=20”(仮)で、エラーだと警告文表示後に変数入力部に戻したいのです。

変数を画面上から”変数 = $<”で読み込み、処理をしたいのですが、うまくいきません。

整数値だとうまく行く方法を見つけましたが、小数値が入るとNG、小数値でもうまく行く方法を見つけました(bcを使用)が、文字列が入力されるとNG、と行き詰まってしまいました。

入力値としては小数値を期待しているのですが、操作する人が間違って”3..2”や”2 5”、”4rr”等が入力された場合も偽の判断をもって処理を戻したいのですが、ifの形式がおかしいとか、文法上のエラーがあると表示され、うまく戻ってくれません。

なにか良い方法はないでしょうか?

要は、if(変数 > 0 && 変数 <= 20) then で変数の値が文字列、小数、整数問わずに処理をしたいだけなんですが・・・。

どうぞ宜しく御願いします。

A 回答 (4件)

expr等を使って正規表現で判断するしかないでしょうね。

\| の前が小数値、後ろが整数値のチェックです。
expr以外でも正規表現が使えるコマンドなら何でもいいですが。

expr "$var" : '[0-9][0-9]*\.[0-9][0-9]*$' \| "$var" : '[0-9][0-9]*$' >/dev/null

if( $status == 0 ) then
 正常処理
else
 エラー処理
endif
    • good
    • 0
この回答へのお礼

詳細な回答有難うございます。
このようなやり方は想像つきませんでしたが、条件をたくさん設定して、エラー入力を回避するしかないみたいですね・・・。参考にさせて頂きます。

お礼日時:2006/04/04 10:19

文法エラーのメッセージを /dev/null に捨てたらどうですか。



あるいは、一旦 exprコマンドで数値としての形式を取っているか確かめてから、cshのif文を行うとか。

いずれにせよ、シェルスクリプトをcshで書くことはお薦めできません。
cshは対話利用にとどめてshで書く方が良いと思いますよ。
    • good
    • 0
この回答へのお礼

回答有難うございます。cshはいまいちですか・・・。
検討してみます。

お礼日時:2006/04/04 10:20

Perlでコーディングすれば問題ないですよ。

    • good
    • 0
この回答へのお礼

回答有難うございます。
Perlはまだ勉強不足で、やってはみましたがやはり条件設定をたくさんしなければだめでした。

お礼日時:2006/04/04 10:22

数値に見えないようなものは先に除外してから bc に送り込めばいいのでは?

この回答への補足

回答有難うございます。
それも考えたのですが・・・。
除外するための何か良い方法はありませんか?
変数を一度ファイルに取り込んでtrで変換とか考えたのですがどうもスマートでないので止めました。
if文のなかではメタキャラクタもうまく使えなくて英字の削除ができません。”.”や空白の処理もどうしたものかと思い、またまた現在作業停滞中でございます・・・。

補足日時:2006/04/03 19:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています