- ベストアンサー
シェルの引数チェックについての質問
どうも、はじめまして。 シェルについて質問させていただきます。 現在、業務で あるプログラムを起動するための起動シェルを作成しております。 そしてその起動シェルではパラメータとして 二つの値を渡しているのですが、 そのパラメータは 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はソラリスです。 どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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)
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
お礼
わかりやすい方法教えていただきましてどうもありがとうございます。 やってみたところ、 思い通りの結果を得ることができました。 ありがとうございましたm(__)m