コマンド置換を使った条件分

Pocket

シェルの条件式は他のプログラム言語と比べて特徴があると感じています。
備忘録として条件式についてメモします。

シェルの条件式を評価するコマンドにtestがあります。
testコマンドの例です。

str="aaa"
if test "$str" = "aaa"; then
  echo "same"
fi

# same

testコマンドの糖衣構文に[ ]があります。
[ ]の例です。

str="aaa"
if [ "$str" = "aaa" ]; then
  echo "same"
fi

# same

Bashはより高機能な[[ ]]を使用できます。
例えば[[ ]]は正規表現を使用できます。

str="abc"
if [[ $str =~ ^a.+$ ]]; then
  echo "match"
fi

# match

※ 正規表現をクォートで囲みません。

多くのプログラム言語の条件式を表す( )は出てきていません。
シェルはコマンド置換で( )を使用します。

( )の例です。

echo $(pwd)

/home/foo

意味のないの例ですがコマンド置換を条件に使ってみます。

if (pwd); then
  echo "something"
fi

# /home/foo
# something

少し意味のある例を考えます。

echo -e "aaa\nbbb\nccc" > tmp.txt

if (grep "aaa" tmp.txt > /dev/null); then
  echo "match"
fi

# match

if (grep "ddd" tmp.txt > /dev/null); then
  echo "match"
fi

# 条件を満たさないのでなにも表示されません。

上記は(grep "aaa" tmp.txt > /dev/null)は正常終了(exit 0)、(grep "ddd" tmp.txt > /dev/null)は異常終了(exit 0以外)を使用しています。
コマンドの実行結果は$?で取得できます。

さらに(( ))を算術の条件式に使用できます。

count=5

if (( count < 10 )); then
  echo "5 is less than 10"
fi

# 5 is less than 10

以上条件式についてまとめみました。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。