シェル・スクリプト・リファンレス |
コマンド集(機能別) | コマンド集(アルファベット順) | コマンド逆引き大全 | シェル・スクリプト・リファンレス |
整数計算を行う「expr」 |
整数計算を行う場合に利用できるのが「expr」だ。exprの利用法を表に示す。
数式 | 意味 |
---|---|
( 数式 ) | 括弧内の計算を先に行う。ただし,カッコの前にバック・スラッシュ「\」を付ける必要がある |
数値1 + 数値2 | 数値1と数値2をたす |
数値1 - 数値2 | 数値1から数値2を引く |
数値1 * 数値2 | 数値1と数値2を掛け合わせる。ただし,「*」の前にバック・スラッシュ「\」を付ける必要がある |
数値1 / 数値2 | 数値1から数値2を割る。ただし,余りは切り捨てられる |
数値1 % 数値2 | 数値1から数値2を割った余り |
たとえば,足し算を行う場合は,
$ expr 1 + 2 3 |
とする。ただし,カッコとかけ算は記号の前にバック・スラッシュを付ける必要がある。
$ expr \( 1 + 2 \) \* 5 15 |
変数を利用した計算も行える。たとえば,変数aとbを掛け合わせて変数cに代入するには,
$ a=5 $ b=2 $ c=`expr $a \* $b` $ echo $c 10 |
とする。計算結果を変数に代入する場合はexprをバック・クォーテイションでくくる必要がある。
数値の条件判別の可能 |
ifなどで条件を判別するにはtestを利用した。また,exprを利用しても数値の判別が行える。表のようなものを利用して判別を行える。
判別式 | 意味 |
---|---|
数値1 = 数値2 | 数値1と数値2が等しいなら「1」(終了コードは0)を返す |
数値1 != 数値2 | 数値1と数値2が等しくないなら「1」(終了コードは0)を返す |
数値1 < 数値2 | 数値1が数値2より小さいなら「1」(終了コードは0)を返す。ただし,「<」の前にバック・スラッシュ「\」を付ける必要がある |
数値1 <= 数値2 | 数値1が数値2より小さいまたは等しいなら「1」(終了コードは0)を返す。ただし,「*<」の前にバック・スラッシュ「\」を付ける必要がある |
数値1 > 数値2 | 数値1が数値2より大きいなら「1」(終了コードは0)を返す。ただし,「>」の前にバック・スラッシュ「\」を付ける必要がある |
数値1 >= 数値2 | 数値1が数値2より大きいまたは等しいなら「1」(終了コードは0)を返す。ただし,「>」の前にバック・スラッシュ「\」を付ける必要がある |
式1 & 式2 | 式1と式2が共に真ならば「1」(終了コードは0)を返す。ただし,「&」の前にバック・スラッシュ「\」を付ける必要がある |
式1 | 式2 | 式1と式2のいずれかが真ならば「1」(終了コードは0)を返す。ただし,「|」の前にバック・スラッシュ「\」を付ける必要がある |
たとえば,2つの変数が等しいか確かめるなら,
$ a=1 $ b=2 $ expr $a = $b 0 |
とする。この場合は等しくないので,「0」が返される。
ただし,終了コードが返される値と逆になるようにできている。たとえば,条件判別が正しい場合は「1」を返すが,終了コードが「0」を返すようになっている。こうすることで,ifやwhileの条件判別にも利用できる。
たとえば,以下のようなシェル・スクリプト「cp_file.sh」があったとする。
#!/bin/sh if `expr $# = 2 > /dev/null` then cp $1 $2 else echo "Usage : cp_file.sh SOURCE DEST" fi |
このスクリプトでは「expr $# = 2」で引数を2つ与えていることを確認してから,コピーコマンドを実行している。リダイレクトで/dev/nullに送っているのは,exprの実行結果を表示しないようにするためだ。
関連事項 |
expr,複雑な計算を行う「bc」 |