シェルスクリプトのif文の書き方を徹底解説します。
シェルスクリプトに限らずif文は、必須になるので知っておいて損はないと思います。
Contents
1. 文字列の比較
シェルスクリプト
% cat test.sh #!/bin/bash str1="A" str2="a" str3="A" if [ $str1 = $str2 ]; then echo "1と2は同じだよ!!" elif [ $str1 = $str3 ]; then echo "1と3は同じ!!" else echo "1と同じ文字はないよ!!" fi
シェルスクリプトでは、文字列の比較は、「=」で行います。
他言語で言う所の「else if」は「elif」と記述します。
結果
% bash test.sh 1と3は同じ!!
2. 数値の比較
数値の比較は、下記表の通りの条件式で行います。
〜より大きい | num1 -gt num2 |
〜より小さい | num1 -lt num2 |
〜以上 | num1 -ge num2 |
〜以下 | num1 -le num2 |
2-1. ~より大きいで比較したい
シェルスクリプト
#!/bin/bash num1=1 num2=2 if [ $num2 -gt $num1 ] ; then echo "num2はnum1より大きい" else echo "num2はnum1以下" fi
結果
% bash test.sh num2はnum1より大きい
2-2. ~より小さいで比較したい
シェルスクリプト
#!/bin/bash num3=3 num4=4 if [ $num3 -lt $num4 ] ; then echo "num3はnum4より小さい" else echo "num3はnum4以上" fi
結果
% bash test.sh num3はnum4より小さい
2-3. ~以上で比較したい
シェルスクリプト
#!/bin/bash num5=1 num6=1 if [ $num5 -ge $num5 ] ; then echo "num5はnum6以上" else echo "num5はnum6より小さい" fi
結果
% bash test.sh num5はnum6以上
2-4. ~以下で比較したい
シェルスクリプト
#!/bin/bash num5=1 num6=1 if [ $num5 -le $num5 ] ; then echo "num5はnum6以下" else echo "num5はnum6より大きい" fi
結果
% bash test.sh num5はnum6以下
3. NOT条件を使う
シェルスクリプト
#!/bin/bash isTrue=true if [ ! $isTrue ]; then echo "こっちにはこないだろうな〜" else echo "こっち!" fi
結果
% bash test.sh こっち!
4. AND条件を使う
シェルクリプト
#!/bin/bash num1=1 num2=1 num3=2 num4=2 if [ $num1 = $num2 ] && [ $num3 = $num4 ]; then echo "num1とnum2が同じかつnum3とnum4は同じ" else echo "こっち!" fi
結果
% bash test.sh num1とnum2が同じかつnum3とnum4は同じ
5. OR条件を使う
シェルクリプト
#!/bin/bash num1=1 num2=1 num3=3 num4=2 if [ $num1 = $num2 ] || [ $num3 = $num4 ]; then echo "num1とnum2が同じもしくはnum3とnum4は同じ" else echo "こっち!" fi
結果
% bash test.sh num1とnum2が同じもしくはnum3とnum4は同じ
5. ファイルの存在確認
シェルスクリプト
#!/bin/bash TARGET_FILE="test.txt" if [ -f ${TARGET_FILE} ]; then echo "ファイルが存在します" else echo "ファイルが存在しません" fi
結果
% bash test.sh ファイルが存在します
6. ディレクトリの存在確認
シェルスクリプト
#!/bin/bash TARGET_DIR="test" if [ -d ${TARGET_DIR} ]; then echo "ディレクトリが存在します" else echo "ディレクトリが存在しません" fi
結果
% bash test.sh ディレクトリが存在します
7. コマンドの実行結果を確認する
#!/bin/bash touch test.txt if [ "$?" -eq 0 ] then echo 'command success' else echo 'command fail' fi