シェルの条件式は他のプログラム言語と比べて特徴があると感じています。
備忘録として条件式についてメモします。
シェルで条件式を評価するコマンドに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
※ 正規表現はクォートや /
などで囲みません。
多くのプログラム言語で条件式を表す ( )
はシェルには出てきていません。
( )
はコマンド郡をサブシェルで実行します( )
は$(command)
のようにコマンド置換でを使用します( )
を使ったコマンド置換の例です。
# pwd
# /home/foo に位置
echo $(cd /home/foo/bar; pwd)
# /home/foo/bar
# 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
(( ))
の中は $
は必要ありません。
以上条件式についてまとめみました。