四則演算のコマンドとしてよく利用されるexprコマンドですが、本資料では四則演算を含む他の便利な使用方法も記述します。
パイプを利用する場合は以下のような構文になります。
パイプを文字としてシェルに認識されるようにパイプ(|)の前にバックスラッシュ(\)をつけています。
expr 左項 \| 右項
パイプの動作は左項が空または0の場合、右項が表示されます。
左項が0以外または、空ではない場合は左項が表示されます。
$ i1=Hello $ i2=World $ expr $i1 \| $i2 Hello
$ i1='' $ i2='World' $ expr "$i1" \| "$i2" World
$ i1=0 $ i2=100 $ expr $i1 \| $i2 100
$ i1=1 $ i2=100 $ expr $i1 \| $i2 1
$ expr \( 1 - 1 \) \| \( 100 - 1 \) 99
アンパサンド(&)を文字としてシェルに認識されるようにアンパサンド(&)の前にバックスラッシュ(\)をつけています。
expr 左項 \& 右項
アンパサンドの動作は右項、左項とも0以外または空でなければ左項が表示されます。
両方とも0または空の場合は、右項を表示します。
この条件以外の場合は0が表示されます。
$ i1=Hello $ i2=World $ expr $i1 \& $i2 Hello
$ i1='' $ i2='World' $ expr "$i1" \& "$i2" 0
$ i1=0 $ i2=100 $ expr $i1 \& $i2 0
$ i1=1 $ i2=100 $ expr $i1 \& $i2 1
$ 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
$ 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
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