shellで変数が数値であるか確認する手段

表題の通り。方法はいろいろあるだろうが、これが簡単かな、と思うものをメモしておく。

■ 環境

  • sh

■ 変数チェック

`expr`で計算をさせ、終了ステータスを確認する。

VALUE=$1
expr "${VALUE} + 1" > /dev/null 2>&1
if [ $? -lt 2 ] ; then
  # 数値
  echo "number."
else
  echo "not number."
fi

`expr`で文字列が渡されると、下記のようなエラーとなる。下記は”aaa”を渡した場合。

expr: not a decimal number: 'aaa'

数値であった場合は正常終了である”0“が返却される。manで”EXIT STATUS”を確認すると下記のようである。

EXIT STATUS
     The expr utility exits with one of the following values:
     0       the expression is neither an empty string nor 0.
     1       the expression is an empty string or 0.
     2       the expression is invalid.

となると、条件文は下記でも良いかもしれない。

if [ $? -ne 2 ] 

■ 余談

シェルスクリプトを書くときは、気本的に”sh“(ボーンシェル)で書くようにしている。『”sh”で書いておけば大抵の環境で同じように動く』と師匠に教わったから。10年以上前に言われた事を今でも守ってる。

以上。

■ 関連