シェルスクリプトでコマンドの結果を利用

2016年8月1日(更新: 2018年1月4日)

UNIXコマンドを実行した結果(本来はコンソールに表示される内容)を変数に代入して利用することができます。

まず古いシェルでも動く書き方を説明し、その後、bash や ksh などの比較的新しいシェルで動作する書き方を説明します。

古い書き方 バッククォート

結果を利用したいコマンドを `(バッククォート)で囲みます。次の例は、コマンド ls の結果を変数に代入して表示します。

    #!/bin/bash

    abc=`ls`
    echo ${abc}

例として、カレントディレクトリにあるファイルが以下の画像のような場合の結果を示します。

ディレクトリの中身

実行結果

Applications Desktop Documents Downloads Dropbox Library Movies Music Pictures Public apache-tomcat-7.0.42 eclipse git node_modules

lsコマンドは、カレントディレクトリに含まれるファイルなどを整形して表示しますが、変数に代入したことにより、半角スペースで区切られた文字列となりました。

古い書き方で計算を行う

四則演算を行うコマンド expr を使えば、数値計算ができます。

    #!/bin/bash

    # 足し算
    abc=`expr 20 + 10`
    echo ${abc}

    # 引き算
    abc=`expr 20 - 10`
    echo ${abc}

    # 掛け算
    abc=`expr 20 \* 10`
    echo ${abc}

    # 割り算
    abc=`expr 20 / 10`
    echo ${abc}

    # 割った余り
    abc=`expr 5 % 2`
    echo ${abc}

    # 括弧を使った計算
    abc=`expr \( 20 + 10 \) / 2`
    echo ${abc}
  

実行結果

30
10
200
2
1
15

exprコマンドをバッククォートで囲って使った場合の計算について、いくつか注意点があります。

  • + や – などの演算子の前後には半角スペースが必要です。
  • 掛け算の演算子 * や括弧は、シェルスクリプト上で特殊な意味を持つので、演算子として利用する場合はバックスラッシュを前に置く必要があります。
  • 括弧の前後にも半角スペースが必要です。

新しい書き方

Bashで使える書き方です。

$(コマンド) と書くことで、コマンドの結果を得ることができます。

    #!/bin/bash

    abc=$(ls)
    echo ${abc}
  

実行結果

Applications Desktop Documents Downloads Dropbox Library Movies Music Pictures Public apache-tomcat-7.0.42 eclipse git node_modules test.sh

新しい書き方で計算を行う

expr は $((計算式)) と書くことができます。この場合、古い書き方で必要だった、演算子と括弧の前後の半角スペースと、*と括弧の前のバックスラッシュは不要になります。出来ればこちらの書き方をしましょう。

    #!/bin/bash

    # 足し算
    abc=$((20 + 10))
    echo ${abc}

    # 引き算
    abc=$((20 - 10))
    echo ${abc}

    # 掛け算
    abc=$((20 * 10))
    echo ${abc}

    # 割り算
    abc=$((20 / 10))
    echo ${abc}

    # 割った余り
    abc=$((5 % 2))
    echo ${abc}

    # 括弧を使った計算
    abc=$(( (20 + 10) / 2 ))
    echo ${abc}

また、変数の値を1だけ増やす(インクリメント)または減らす(デクリメント)場合は、以下のように書くことができます。


abc=0

# インクリメント
((abc++))

echo ${abc} # 1が出力される

# デクリメント
((abc--))

echo ${abc} # 0が出力される

練習問題

以下の条件を満たすシェルスクリプトを作ってください。

  • シェルスクリプトに実行時引数として2つの数値を渡すと、その和を表示する。
答え(クリックで開く)
      #!/bin/bash

      echo $((${1} + ${2}))
    

古い書き方しかできない場合は

      #!/bin/sh

      echo `expr ${1} + ${2}`
    

コメントを残す

メールアドレスが公開されることはありません。