expr と test を使うとすると、
read A
A1=`expr "$A" : '\([0-9]\+\)\.'`
A2=`expr "$A" : '[0-9]\+\.\([0-9]\+\)\.'`
A3=`expr "$A" : '[0-9]\+\.[0-9]\+\.\([0-9]\+\)\.'`
A4=`expr "$A" : '[0-9]\+\.[0-9]\+\.[0-9]\+\.\([0-9]\+\)$'`
if test -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" &&
test "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255
then echo OK
else echo NG
fi
質問者
補足
ご回答ありがとうございます。
すみません。もう1点質問させてください。
if test -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" &&
test "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255
の部分をNot(否定)で書くとどのようになりますか?
ご教授のほどよろしくお願いします。
>の部分をNot(否定)で書くとどのようになりますか?
if で使うなら、then 部分と else 部分の内容を逆に書けばいいです。then 部分が空になるなら : とコロンを書いておきます。
while の条件で使うなら、この手は使えないので、それぞれのtestの条件を !( ) で囲んで、
test \! \( -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" \) || test \! \( "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255 \)
補足
ご回答ありがとうございます。 すみません。もう1点質問させてください。 if test -n "$A1" -a -n "$A2" -a -n "$A3" -a -n "$A4" && test "$A1" -le 255 -a "$A2" -le 255 -a "$A3" -le 255 -a "$A4" -le 255 の部分をNot(否定)で書くとどのようになりますか? ご教授のほどよろしくお願いします。