• ベストアンサー

シェルの引数チェックについての質問

どうも、はじめまして。 シェルについて質問させていただきます。 現在、業務で あるプログラムを起動するための起動シェルを作成しております。 そしてその起動シェルではパラメータとして 二つの値を渡しているのですが、 そのパラメータは 1、整数でなければならない 2、整数は1~6桁で7桁以上はエラーとする ということを条件にしております。 ここでプログラムを起動する際の引数チェックとして 適切なロジックをどなたかご教示いただけないでしょうか? 自分としては まず if整数の桁チェック(length)7桁以上  then if 引数が数字であるかどうかのチェック      then プログラムの起動     else エラー else エラー fi と言う風に考えているのですが 引数が数字であるかどうかのチェックがどうにも うまい方法が思いつきません。 (AWK/[0-9][0-9][0-9][0-9][0-9][0-9]) のような形も考えたのですが、これだと 引数が整数で1桁の場合エラーになってしまって・・・。 どなたか良い方法などありますでしょうか。 ちなみに使用OSはソラリスです。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

exprコマンド使えば簡単に整数7桁の判別はできそうだけど、 Solaris のexprのスペックがわからんので力技で。 case $1 in [0-9]) echo 1 ;; [0-9][0-9]) echo 2 ;; [0-9][0-9][0-9]) echo 3 ;; [0-9][0-9][0-9][0-9]) echo 4 ;; [0-9][0-9][0-9][0-9][0-9]) echo 5 ;; [0-9][0-9][0-9][0-9][0-9][0-9]) echo 6 ;; [0-9][0-9][0-9][0-9][0-9][0-9][0-9]) echo 7 ;; *) echo argument error! ;; esac 1~7桁をまとめていいのなら、|でつなげばいいです。 awk で判別するなら ARGV[1] ~ /^[0-9]+$/ && length(ARGV[1]) < 8 { 正しい引数 } かな? 複数の引数に対応するのは宿題ということで一つ。

その他の回答 (1)

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

expr でやるなら、 #長さを求める L1=`expr "$1" : '.*'` L2=`expr "$2" : '.*'` #先頭から数字部分を取り出す N1=`expr "$1" : '\([0-9]*\)'` N2=`expr "$2" : '\([0-9]*\)'` if test $L1 -ge 1 -a $L1 -le 6 -a $L2 -ge 1 -a $L2 -le 6 then if test "$1" = "$N1" -a "$2" = "$N2" then プログラムの起動 else 数字で無いエラー fi else 桁数エラー fi

mtpkyuuri2
質問者

お礼

わかりやすい方法教えていただきましてどうもありがとうございます。 やってみたところ、 思い通りの結果を得ることができました。 ありがとうございましたm(__)m

関連するQ&A