* testコマンド [#d7d611f8] ** 文字列比較 [#s503ecf6] "A" = "A" "A" != "B" -n "A" (文字列は空でない) -z "" (文字列は空) ** 数値比較 [#cd94e02a] 1 -eq 1 2 -gt 1 2 -ge 2 1 -lt 2 2 -le 2 2 -ne 1 *** 比較対象が空文字列の場合 [#a13cfea1] $ [[ "" -eq 0 ]] && echo OK OK ** ファイル評価 [#f17d3091] -f file -d dir -r file (読み込み可能) -w file (書き込み可能) -x file (実行可能) -s file (サイズ0以上) ** 論理演算子 [#x4001eff] 1 -a 1 0 -o 1 ** 否定 [#w19ff52b] if [ ! -f /tmp/1.txt -a ! -f /tmp/2.txt ]; then echo "no 1.txt, no 2.txt" fi ** 戻り値判定 [#z54b8ad7] *** 通常の判定 [#n6065367] [ "a" = "a" ] && echo "OK" if [ "a" != "b" ]; then echo "OK" fi *** 特殊変数$?による判定 [#k96d76d4] [ "a" = "a" ] if [ $? -eq 0 ]; then echo "OK" fi ** 複合コマンド [[ ]][#i02e55c9] [ 1 -lt 2 ]; echo $? # => 本来は-ltで数値比較する [ 1 < 2 ]; echo $? # => "<"で比較するとリダイレクトと判断されてエラーが起きる [ 1 \< 2 ]; echo $? # => "<"をバックスラッシュでエスケープするとエラーを回避できる [[ 1 < 2 ]]; echo $? # => 複合コマンド"[[ ]]"ならエスケープしなくてもエラーが起きない ** グループ化 [#cf5bef82] 丸かっこ"()"でのグループ化でも複合コマンド"[[ ]]"は便利に使える。 丸かっこ"()"でくるんでグループ化する場合、通常は、 [ \( "a" = "a" \) -a \( "b" = "b" \) ]; echo $? のように丸かっこ"()"をエスケープする必要がある。複合コマンド"[[ ]]"を使えば、 [[ ( "a" = "a" ) && ( "b" = "b" ) ]]; echo $? のように書ける。 ** 参考 [#r60c0c21] - http://www.ibm.com/developerworks/jp/linux/library/l-bash-test.html - http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/sh-text/sh/node48.html