シェルの条件式は他のプログラム言語と比べて特徴があると感じています。
備忘録として条件式についてメモします。
シェルの条件式を評価するコマンドに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.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。