このエントリーをはてなブックマークに追加


exprのサンプル

四則演算のコマンドとしてよく利用されるexprコマンドですが、本資料では四則演算を含む他の便利な使用方法も記述します。


関連資料

パイプ(|)を利用したサンプル

パイプを利用する場合は以下のような構文になります。
パイプを文字としてシェルに認識されるようにパイプ(|)の前にバックスラッシュ(\)をつけています。

expr 左項 \| 右項

パイプの動作は左項が空または0の場合、右項が表示されます。
左項が0以外または、空ではない場合は左項が表示されます。

  • 左項にHelloがあるのでHelloが表示されます。
    $ i1=Hello
    $ i2=World
    $ expr $i1 \| $i2
    Hello
  • 左項が空で右項がWorldなのでWorldが表示されます。
    左項が空なのでダブルクォーテーションで囲まないと文法エラーになります。
    $ i1=''
    $ i2='World'
    $ expr "$i1" \| "$i2"
    World
  • 数値の場合の実行例
    • 左項が0なので右項が表示されます。
      $ i1=0
      $ i2=100
      $ expr $i1 \| $i2
      100
  • 左項が0以外なので左項が表示されます。
    $ i1=1
    $ i2=100
    $ expr $i1 \| $i2
    1
  • 演算式も記述できます。
    以下の例は左項が0になるので、右項の演算結果が表示されます。
    $ expr \( 1 - 1 \) \| \( 100 - 1 \)
    99

アンパサンド(&)を利用したサンプル

アンパサンド(&)を文字としてシェルに認識されるようにアンパサンド(&)の前にバックスラッシュ(\)をつけています。

expr 左項 \& 右項

アンパサンドの動作は右項、左項とも0以外または空でなければ左項が表示されます。
両方とも0または空の場合は、右項を表示します。
この条件以外の場合は0が表示されます。

  • 左項にHelloがあるのでHelloが表示されます。
    $ i1=Hello
    $ i2=World
    $ expr $i1 \& $i2
    Hello
  • 左項が空で右項がWorldなのでアンパサンド(&)の条件が成立しないので0が表示されます。
    左項が空なのでダブルクォーテーションで囲まないと文法エラーになります。
    $ i1=''
    $ i2='World'
    $ expr "$i1" \& "$i2"
    0
  • 数値の場合の実行例
    • アンパサンド(&)の条件が成立しないので0が表示されます。
      $ i1=0
      $ i2=100
      $ expr $i1 \& $i2
      0
  • 左項も右項も0以外なので左項が表示されます。
    $ i1=1
    $ i2=100
    $ expr $i1 \& $i2
    1
  • 演算式も記述できます。
    以下の例は左項が9になるので、右項の演算結果が表示されます。
    $ expr \( 10 - 1 \) \& \( 100 - 1 \)
    9
    右項が0になるので、アンパサンド(&)の条件が成立しないので0が表示されます。
    $ expr \( 10 - 1 \) \& \( 1 - 1 \)
    0

比較演算子を利用したサンプル(<, <=, =, ==, !=, >=, >)

比較した内容が正しければ1を、正しく無ければ0を表示します。
(真なら1、偽なら0)

  • < を利用した例
    文字としてシェルに認識されるように<の前にバックスラッシュ(\)をつけています。
    $ expr 100 \< 100
    0
    $ expr 100 \< 200
    1
    $ expr 200 \< 100
    0
  • > を利用した例
    文字としてシェルに認識されるように>の前にバックスラッシュ(\)をつけています。
    $ expr 100 \> 100
    0
    $ expr 100 \> 200
    0
    $ expr 200 \> 100
    1
  • = (==) を利用した例
    イコール(=)とイコールイコール(==)は同じ意味(同じ動作)になります。
    $ expr 100 = 100
    1
    $ expr 100 == 100
    1
    $ expr 200 = 100
    0
    $ expr 200 == 100
    0
  • !=を利用した例
    !=は右項と左項が異なる場合は1、同じ場合は0になります。
    $ expr 100 != 100
    0
    $ expr 200 != 100
    1
    $ expr "Hello" != "Hello"
    0
    $ expr "Hello" != "World"
    1
  • <=を利用した例
    文字としてシェルに認識されるように<の前にバックスラッシュ(\)をつけています。
    $ expr 100 \<= 100
    1
    $ expr 200 \<= 100
    0
    $ expr 100 \<= 200
    1
  • >=を利用した例
    文字としてシェルに認識されるように>の前にバックスラッシュ(\)をつけています。
    $ expr 100 \>= 100
    1
    $ expr 200 \>= 100
    1
    $ expr 100 \>= 200
    0

四則演算など

exprで+-*/を利用して四則演算ができます。()も利用できます。

  • 足し算の例
    $ expr 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
    55
  • 引き算の例
    $ expr 100 - 10 - 1
    89
  • 割り算の例
    $ expr 100 / 10
    10
  • 掛け算の例
    文字としてシェルに認識されるように*の前にバックスラッシュ(\)をつけています。
    $ expr 9 \* 9
    81
  • 混在
    以下のように括弧を含んだ計算もできます。
    文字としてシェルに認識されるように()*の前にバックスラッシュ(\)をつけています。
    $ expr \( 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 \) \* 10
    550
  • 余りを取得する
    余りを取得することもできます。
    $ expr 10 % 8
    2
    $ expr 10 % 7
    3
    $ expr 10 % 6
    4
    $ expr 10 % 5
    0

パターンマッチ(match)

expr 文字列 : 文字列

以下も同じ動作

expr match 文字列 文字列

マッチしない場合は0を返却します。
詳しくは man expr で確認してください。

$ expr sakura : sakura
6
$ expr match sakura sakura
6
$ expr match sakura sakur
5
$ expr match sakura sak
3
$ expr match sakura zzz
0

文字列部分の取得

substrを利用することにより文字列の部分取得ができます。

expr substr 文字列 開始位置 長さ

以下に実行例を記します。

$ expr substr sakura 1 6
sakura
$ expr substr sakura 2 6
akura
$ expr substr sakura 2 3
aku

文字が存在した位置を返却する

indexを利用することにより、文字が出現した位置が返却されます。

expr index 文字列 キャラクタクラス

注意点としては、キャラクタクラスに指定した文字のいづれかが存在した最初の位置を返却します。
以下に実行例を記します。

$ expr index sakura s
1
$ expr index sakura a
2
$ expr index sakura tsubaki
1

文字列の長さを取得する

lengthを利用することにより文字列の長さを取得することができます。
以下に実行例を記します。

$ expr length sakura
6
$ expr length " sakura "
8
$ expr length ""
0


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:07