シェルスクリプトで変数の内容が整数か判定する方法
目次
スポンサードリンク
シェルスクリプトでは変数を宣言し、数値や文字列を代入することができます。 この記事では、変数に代入されている内容が整数かどうか判定する方法を紹介します。
[ ] 構文を使用する方法
変数の内容が整数かどうかを判定する方法はいくつかありますが、[ ] 構文を利用する方法はシンプルで多くのシェル環境で実行することができます。
下記サンプルでは、[ ] 構文で変数 num と 0 を比較します。変数の内容が整数であれば正常に比較が実行され、終了コードは0になります。変数の内容が文字列の場合は、比較でエラーとなり終了コードは2以上になります。
$? は直前のコマンドの終了コードを返す変数です。2>/dev/null は、比較結果のエラーメッセージを /dev/null に捨てることで、$? の値に影響を与えないようにしています。if [ $? -ge 2 ]; then の部分で終了コードが2以上かどうか判定し、変数の内容が整数かどうか出力しています。
#!/bin/bash
num="123"
[ "$num" -eq 0 ] 2>/dev/null;
if [ $? -ge 2 ]; then
echo "$num は整数ではありません"
else
echo "$num は整数です"
fi
[[ ]] 構文を使用する方法
[[ ]] 構文は、 [ ] 構文を拡張したもので、より強力なパターンマッチングができます。正規表現を使い、変数の内容が整数かどうか判定することができます。下記サンプルでは、正規表現 ^[0-9]+$ で、変数内の文字列が先頭から末尾まですべて数値か判定しています。
#!/bin/bash
num="123"
if [[ $num =~ ^[0-9]+$ ]]; then
echo "$num は整数です"
else
echo "$num は整数ではありません"
fi
この方法であれば、正規表現を工夫することで整数だけでなく様々な数値に対応することができます。例えば、正規表現「^-?[0-9]+(.[0-9]+)?$」なら、少数や負の数にも対応することができます。
#!/bin/bash
num="-123.1a"
if [[ $num =~ ^-?[0-9]+(.[0-9]+)?$ ]]; then
echo "$num は数値です"
else
echo "$num は数値ではありません"
fi
検証したbashバージョン
当記事の内容は下記バージョンで検証しています。
[root@hostname tmp]# bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。
Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)