読者です 読者をやめる 読者になる 読者になる

計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

シェルスクリプトで変数が数値かどうかチェック

数値かどうか判定

expr "$AAA" + 1 >/dev/null 2>&1
if [ $? -lt 2 ]
then
    echo "Numeric"
else
    echo "not Numeric"
fi

exprを使ってAAAに1を加える。このとき、AAAが数値ならば実行終了ステータスは0か1になる。計算結果が0の時だけ1になるらしい。AAAが数値ではない場合、エラーとなり2以上なる

/dev/nullというのはブラックホールみたいなものでこれにリダイレクトしてやれば何も出力されなくなる。判定したいだけで出力はしたくないのでこのようになる。 

2>&1でエラー出力を標準出力にまとめる。これでエラー出力も出力されなくなる

$?は直前のコマンドの実行終了ステータスで、今回の場合これが2より小さいとAAAには数値が代入されていることになる

ブルース・ブリンの入門UNIXシェルプログラミングの中にこのテクニックが何回か出てくる。 ここに書いていることを詳しく知りたい人は読むといい