LinuCレベル1 102試験の例題と解説

1.06.2シェルスクリプト

LinuCレベル1 102試験の出題範囲から「1.06.2 シェルスクリプト」についての例題を解いてみます。
ここでは、条件に応じた処理について確認してみましょう。

Linucレベル1 102試験 出題範囲


例題

スクリプトを実行したディレクトリ配下に、「backup」というファイルがあるかチェックを行い、存在する場合は「backup file found」というメッセージを表示し、存在しない場合は「not found」というメッセージを表示する処理を書きます。
下記の [A] と [B] に書く組み合わせとして、正しいものを1つ選択してください。

#!/bin/bash

[A]
    echo 'backup file found'
[B]
    echo 'not found'
fi
  1. A:if [ -f 'backup' ] B:else
  2. A:if [ -f 'backup' ]; then B:else
  3. A:if [-f 'backup']; then B:else
  4. A:if [ -f 'backup' ]; then B:elif

※この例題は実際の試験問題とは異なります。


解答と解説

正解は、「2. A:if [ -f 'backup' ]; then B:else」です。

シェルスクリプトは、先頭から順にコマンドを実行する処理だけでなく、条件によって処理を分岐させることができます。条件によって処理を選択する際は、if文を使います。
書式は次の通りです。

if 条件式
then
    実行文1
else
    実行文2
fi

条件式が真(条件が満たされる)の場合、実行文1が実行されます。
条件式が偽(条件が満たされない)の場合、実行文2が実行されます。

次に示すのは、if文を使ったスクリプトの例です。

#!/bin/bash

if test -f 'backup'
then
    echo 'backup file found'
else
    echo 'not found'
fi

条件で判別する際は、「test」コマンドを使います。(3行目)
「test」コマンドは、条件文に書かれた式を評価し、真の場合は0を、偽の場合は0以外の値を返します。

上記で示したスクリプトでは、まず "backup というファイルがあるか" という条件文を評価します。(3行目)
ファイルがある(真)場合は "backup file found というメッセージを表示する" という実行文1が実行されます。(5行目)
ファイルがない(偽)場合は "not found というメッセージを表示する" という実行文2が実行されます。(7行目)

上記で示したスクリプトは、次のように書き換えることもできます。

#!/bin/bash

if [ -f 'backup' ]; then
    echo 'backup file found'
else
    echo 'not found'
fi

";" を使って複数のコマンドを1行にまとめて記述することができます。(3行目)
また、スクリプトの実行には、testコマンドの省略された形である "[]" を使っています。(3行目)
"[" の後と "]" の前には半角スペースが必要です。

条件式を複数使いたい場合は、"elif" を使って追加の条件式を書くことができます。
書式は次の通りです。

if 条件式
then
    実行文1
elif 条件式
then
    実行文2
else
    実行文3
fi

上記で示したスクリプトに、「backup」というディレクトリが存在する場合は「backup directory found」というメッセージを表示する処理を追加します。

#!/bin/bash

if [ -f 'backup' ]; then
    echo 'backup file found'
elif [ -d 'backup' ]; then
    echo 'backup directory found'
else
    echo 'not found'
fi

この場合、「backup」というファイルが存在する場合は「backup file found」というメッセージを表示します。(3~4行目)
「backup」というディレクトリが存在する場合は「backup directory found」というメッセージを表示します。(5~6行目)
「backup」というファイルもディレクトリも存在しない場合は「not found」というメッセージを表示します。(7~8行目)

例題の選択肢について解説します。

1. A:if [ -f 'backup' ] B:else
誤った選択肢です。
Aで「; then」が抜けているため、エラーが発生します。

2. A:if [ -f 'backup' ]; then B:else
正しい選択肢です。

3. A:if [-f 'backup']; then B:else
誤った選択肢です。
Aで "[" の後と "]" の前に半角スペースがないため、条件式が正しく判別されません。

4. A:if [ -f 'backup' ]; then B:elif
誤った選択肢です。
Bが「else」でないため、エラーが発生します。

今回はシェルスクリプトにおける、条件に応じた処理について紹介しました。if文を習得することで、より複雑な処理ができるようになります。シェルスクリプトを書く上で必ずと言っていいほど使う構文なので、覚えておきましょう。


例題作成者

株式会社デージーネット 経営企画室 小倉崇志

ページトップへ