質問 |
||
| QNo.3970199 | シェルプログラムの判定について | |
|---|---|---|
| 質問者:hks2 |
皆さんのお知恵をお貸しください シェルは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 +-*/が入った時にエラーを出したいのですが+-*/をどう判定したらよいのか教えて頂けます様お願い致します。 |
|
困り度:
|
||
| 質問投稿日時: 08/04/23 17:13 |
||
回答 |
|
| ANo.4 | cshは良く知らないので。 read moge #echo "$moge"|grep -q -e '[-+/*]' #if [ $? -eq 0 ] if expr index "$moge" '-+/*' >/dev/null then echo 'invalid input' else echo 'OK' fi |
|---|---|
| 回答者:sakusaker7 | |
| 種類:回答 どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/04/25 16:32 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 回答有難う御座います うまく判別出来ました bashですね bashも勉強したくなりました。 |
回答 |
|
| ANo.3 | 「grep から if」のところを「if test」にする... くらいしか思い付かない. 変数は 1個減るけど. |
|---|---|
| 回答者:Tacosan | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/04/25 12:52 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 回答有難う御座います testですか思いつきませんでした 早速試させて頂きます。 |
回答 |
|
| ANo.2 | >moji:Undefined variable. 変数が未定義というエラーなので、99% タイプミスが原因です。 >bashでどのように書かれますか? 薦めておいて申し訳ないですが、このケースだと、わかりやすく書くと大差ないものしか思い浮かびません。 |
|---|---|
| 回答者:notnot | |
| 種類:回答 どんな人:一般人 自信:自信あり |
|
| 回答日時: 08/04/24 22:04 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 回答有難う御座います bash変なお願い致しまして申し訳ございませんでした スクリプトはご指摘のようにタイプミスでした 現状下記で動作いたしております echo -n "input number * " set name = $< echo $name > aaa set name1 = `grep -c '[-+*/]' aaa` if ( $name1 == 1 ) then echo 文字に誤りがあります else echo OK endif ですがこのスクリプトを本体に組み込むと動作しなくなります 下記が本体のスクリプトです echo -n "誤差 = " set xx = $< echo $xx > xx if ( $xx == 0 ) then echo 0です else if ( $xx == 99 ) then exit else if ( $xx == '' ) then echo enterです endif sed -e 's/^/ /g' -e 's/$/}/g' xx > xxx mv xxx xx set xmojiii = `grep -c '[-+*/]' xx` if ( $xmojiii == 1 ) then goto g endif set xmoji = `grep -c '^ -*[0-]*\.[0-3][0-9]}' xx` set xmojii = `grep -c '^ -*[0-]*\.[0-3]}' xx` if ( $xmoji == 1 || $xmojii == 1 ) then goto l 別の処理に飛びます else g: echo "文字に誤りがあります もう一度誤差を入力して下さい" goto xback endif このスクリプトの目的は数字入力の規制を行う事です 下記の入力のみ受け付けたい 少数点第1位は0〜3まで 0 0.0〜3 0.0〜30〜9 -0.0〜3 -0.0〜30〜9 .0〜3 -.0〜3 例 0 0.05 -0.05 0.15 -0.15 0.2 -0.2 .3 -.3等 現状数字の矛盾は回避できたのですが+-*/が回避できません 改めて皆様のお知恵をお借りできれば幸いです。 |
回答 |
|
| ANo.1 | cshはスクリプト機能が貧弱なので、シェルスクリプトを書くならsh/bashなどのほうがいいです。 もとの物を出来るだけ変えないで書くと、 >set moji = `grep -c '[\-\+\*\/]' xx` を set moji = `echo "$xx" | grep -c '[\-\+\*\/]'` あとif文の構文がおかしいです。 if ( $moji == 1 ) then echo 文字に誤りがあります else echo OKです endif あと正規表現の '[\-\+\*\/]' はエラーではないですが、普通は '[-+*/]' と書きます。マイナスは範囲指定と見なされないように先頭か末尾の必要あり。 |
|---|---|
| 回答者:notnot | |
| 種類:回答 どんな人:一般人 自信:自信あり |
|
| 回答日時: 08/04/23 23:41 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | 回答ありがとうございます 早速テストしてみましたが判定出来ませんでした 下記がエラーメッセージです moji:Undefined variable. +-*/を受け付けないようです 正規表現とif文ご指摘有難う御座います以後改めさせて頂きます お時間があればで宜しいのですがnotnotさんでしたらbashでどのように書かれますか? |