ifコマンドは条件分岐のコマンドで基本的なコマンドになります。Bashでのifコマンドはthenのキーワードが必要なことを忘れないようにしたいです。
文字列のパターンでの分岐のような条件分岐を記述する場合は、caseコマンドを利用したほうが良い場合もあります。
case - 複数の条件分岐を行う
caseコマンドはある文字列に対して、パターンマッチを行っていき、コマンドの処理を分岐できます。ファイルの拡張子によってコマンドの実行を分けたい場合やそれぞれ特定のファイル名ごとに処理の実行を分けたい場合に利用できます。
ifコマンドと一緒によく利用するコマンドとしてtestコマンドがあります。
test - ファイルチェック・値の比較をする
testコマンドは、[]コマンドという別の形を持つコマンドです。条件分岐として使用することができるため、シェルスクリプトを作成するときなどでとても便利なコマンドです。使用用途は幅広く、ぜひ覚えておきたいLinuxコマンドです。
ifの構文
ifコマンドの基本的な構文
1 |
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi |
シェルスクリプトで記述する場合は以下のような形式で見られます。
1 2 3 4 5 6 7 |
if COMMANDS; then COMMANDS [elif COMMANDS; then COMMANDS] [else COMMANDS] fi |
ifコマンドの利用例
ifコマンドは条件を判定し、条件の判定によってコマンドの制御を分岐させることができます。条件が判定する終了ステータスの値が、0のときは真で、0以外のときは偽になります。条件によく利用されるコマンドとして[コマンド(testコマンド)が利用されます。
また、数値のチェックとして((...))のような算術式を評価する構文も利用できます。これは評価した式の値が0のときは1(偽)を返し、0以外の場合は0(真)を返します。
if.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash string1="aaa" string2="" echo "count: ${#string1}" echo "count: ${#string2}" if [ -n "$string1" ]; then echo "true" else echo "false" fi if [ -n "$string2" ]; then echo "true" else echo "false" fi |
実行結果
1 2 3 4 5 |
$ ./if.sh count: 3 count: 0 true false |
${#var}は変数に格納されている文字列の文字数を表示できます。
if2.sh
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash a=${a:-10} if ((a<=5)); then echo "aは5以下の数値 a:$a" elif ((a>5)) && ((a<=15)); then echo "aは5より上で15以下の数値 a:$a" else echo "aは15より上の数値 a:$a" fi |
実行結果
1 2 3 4 5 6 |
$ ./if2.sh aは5より上で15以下の数値 a:10 $ a=1 ./if2.sh aは5以下の数値 a:1 $ a=20 ./if2.sh aは15より上の数値 a:20 |
${var:-word}は変数varが未設定またはnullの場合は値がwordになり、それ以外は変数varの値になります。
変数の代入とともにコマンドの実行を行うとそのコマンドに対して、その変数が環境変数として追加されます。