このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:シェルスクリプトの演算子の結合

シェルスクリプトの演算子の結合

 シェルスクリプトでは、複数の条件式を組み合わせてより複雑な条件判定を行うことができます。これを可能にするのが結合演算子です。以下に、条件式を結合するための演算子をまとめます。

結合演算子意味
条件式1 -a 条件式2条件式1と条件式2の両方が真の場合に真(AND)
条件式1 -o 条件式2条件式1か条件式2の少なくとも1つが真の場合に真(OR)
! 条件式条件式の真偽を逆にする(NOT)。
()条件式をグループ化する。

結合演算子を使った条件指定の例

例1:ファイルが存在し、かつサイズが0でないことを確認する

if [ -e "$filename" -a -s "$filename" ]; then
 echo "ファイル '$filename' は存在し、サイズは0ではありません。"
else
 echo "ファイル '$filename' は存在しないか、サイズが0です。"
fi

解説

  • -e "$filename":ファイルが存在するかを確認します。
  • -s "$filename":ファイルのサイズが0でないかを確認します。
  • -a:AND演算子で、両方の条件が真である場合に全体が真となります。

例2:ディレクトリが存在しない、または書き込み不可であることを確認する

if [ ! -d "$dirname" -o ! -w "$dirname" ]; then
 echo "ディレクトリ '$dirname' は存在しないか、書き込み不可です。"
else
 echo "ディレクトリ '$dirname' は存在し、書き込み可能です。"
fi

解説

  • ! -d "$dirname":ディレクトリが存在しないことを確認します。
  • ! -w "$dirname":書き込みパーミッションがないことを確認します。
  • -o:OR演算子で、どちらかの条件が真であれば全体が真となります。

結合演算子を使ったシェルスクリプトの例

スクリプトの作成:ファイルの存在とパーミッションチェック(file-check.sh)

ステップ1:スクリプトの作成

user01@ubuntu:~$ nano file-check.sh

file-check.shの内容

#!/bin/bash

filename="$1"

if [ -e "$filename" ]; then
    if [ -f "$filename" -a -r "$filename" ]; then
        echo "ファイル '$filename' は存在し、読み取り可能な通常のファイルです。"
    else
        echo "ファイル '$filename' は存在しますが、読み取り不可か通常のファイルではありません。"
    fi
else
    echo "ファイル '$filename' は存在しません。"
fi

解説

  • -e "$filename":ファイルが存在するかを確認します。
  • 内部のif文で-f-rをAND演算子-aで結合し、通常のファイルであり読み取り可能かを確認しています。

ステップ2:実行権限の付与

user01@ubuntu:~$ chmod +x file-check.sh

ステップ3:スクリプトの実行と結果

1.読み取り可能な通常のファイル
user01@ubuntu:~$ touch test.txt
user01@ubuntu:~$ chmod 644 test.txt
user01@ubuntu:~$ ./file-check.sh test.txt
ファイル 'test.txt' は存在し、読み取り可能な通常のファイルです。
2.読み取り不可のファイル
user01@ubuntu:~$ chmod 000 test.txt
user01@ubuntu:~$ ./file-check.sh test.txt
ファイル 'test.txt' は存在し、読み取り可能な通常のファイルです。
3.ファイルが存在しない場合
user01@ubuntu:~$ ./file-check.sh nofile.txt
ファイル 'nofile.txt' は存在しません。

作成したスクリプトとファイルの削除

user01@ubuntu:~$ rm file-check.sh test.txt

まとめ

  • 結合演算子を使用することで、複数の条件式を組み合わせて複雑な条件判定が可能になります。
    -a:AND演算子。両方の条件が真の場合に真となる。
    -o:OR演算子。どちらかの条件が真の場合に真となる。
    !:NOT演算子。条件の真偽を逆にする。
    ():条件式をグループ化し、評価の優先順位を指定する。
  • 例示した条件指定では、ファイルの存在やパーミッションの確認など、実用的な条件判定を行いました。
  • シェルスクリプトの活用により、システム管理やスクリプトの制御を柔軟に行うことができます。

 結合演算子を正しく理解し活用することで、シェルスクリプトの表現力が向上し、より複雑なロジックを簡潔に記述できます。