はじめに
こんにちは!今回はexprコマンドについて解説します。
exprは、数学式や文字列操作の式を評価するコマンドです。シェルスクリプトで計算や文字列操作をする時に活躍します。
古いスクリプトによく出てくるコマンドですね。
exprコマンドとは
exprは、数式や文字列操作を評価して結果を返す外部コマンドです。
主な機能:
- 数値計算 - 足し算、引き算、掛け算、割り算
- 比較演算 - 大小比較、等号比較
- 文字列操作 - 文字列の抽出、置換、長さの取得
- 正規表現マッチ - パターンマッチングと抽出
- 論理演算 - AND、OR、NOT
スクリプトで値を計算したり、文字列を処理したりするのに便利です。
基本構文
|
|
複数の項や演算子を空白で区切ります。
主なオプション
| 演算子 | 説明 | 例 |
|---|---|---|
+ |
足し算 | expr 10 + 5 |
- |
引き算 | expr 10 - 3 |
* |
掛け算 | expr 10 '*' 5 |
/ |
割り算 | expr 20 / 4 |
% |
余り | expr 20 % 3 |
= |
等号 | expr 10 = 10 |
!= |
不等号 | expr 10 != 5 |
< |
より小さい | expr 5 < 10 |
<= |
以下 | expr 5 '<=' 10 |
> |
より大きい | expr 10 '>' 5 |
>= |
以上 | expr 10 '>=' 5 |
使用例
例1: 簡単な足し算
|
|
実行結果:
|
|
最もシンプルな計算。
例2: 引き算
|
|
実行結果:
|
|
シンプルな引き算。
例3: 掛け算(エスケープが必要)
|
|
実行結果:
|
|
*はワイルドカードなので、シングルクォートで囲む必要があります。
例4: 割り算
|
|
実行結果:
|
|
整数除算。小数点以下は切り捨て。
例5: 余り(モジュロ)
|
|
実行結果:
|
|
割った時の余りを返します。
例6: 比較演算(等号)
|
|
実行結果:
|
|
真なら1、偽なら0を返す。
例7: 比較演算(大小比較)
|
|
実行結果:
|
|
大小比較も可能。
例8: 文字列の長さを取得
|
|
実行結果:
|
|
文字列の長さを返します。
例9: 部分文字列の抽出
|
|
実行結果:
|
|
位置1から5文字を抽出。(1が最初の位置)
例10: インデックス(文字の位置)
|
|
実行結果:
|
|
最初のlの位置は3。
Tips・注意点
シェル変数との組み合わせ
|
|
変数を使う時は$で展開。
掛け算は\*でエスケープ
|
|
シェルによるワイルドカード展開を防ぐ。
計算結果を変数に保存
|
|
コマンド置換で結果を変数に保存。
実践的な使い方
ループカウンター
|
|
ループで数値をインクリメント。
ファイルサイズチェック
|
|
ファイルサイズの上限チェック。
文字列操作
|
|
文字列から特定部分を抽出。
奇数偶数判定
|
|
モジュロで奇数偶数を判定。
正規表現マッチング
|
|
正規表現でパターンマッチング。
まとめ
exprコマンドのポイント:
- 式を計算・評価するコマンド
- 数値計算:
+、-、*(エスケープ必須)、/、% - 比較:
=、!=、<、<=、>、>= - 文字列操作:
length(長さ)、substr(部分抽出)、index(位置検索) - ワイルドカード:
*は'*'または\*でエスケープ必須 - よく使う組み合わせ:
expr $i + 1,expr length "$string"
古いスクリプトで出現頻度が高いですが、モダンなシェルではもっと便利な機能が多いですよ!