#10 演算子の結合

条件式1 -a 条件式2 条件式1と条件式2の両方が真の場合に真
条件式1 -o 条件式2 条件式1と条件式2の少なくとも1つが真の場合に真
!条件式 条件式の真偽を逆にする(NOT)
() 条件式をグループ化する

演算子の結合の例1

Vimで「comb-and.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

dir=$1

if [ -d "$dir" -a -r "$dir" ]; then
  echo "$dirはディレクトリで読み取りパーミッションがある"
fi

変数「dir」に1つ目の変数を格納。
「-d」なので変数「dir」が存在し、ディレクトリであり、かつ、変数「dir」に読み取りパーミッションが与えられていれば「$dirはディレクトリで読み取りパーミッションがある」と表示される。

シェルスクリプトを実行する

$ ./comb-and.sh /home/minecraft/bin/

実行結果。

/home/minecraft/bin/はディレクトリで読み取りパーミッションがある

演算子の結合の例2

Vimで「comb-and.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

dir=$1

if [ ! -d "$dir" ]; then
  echo "$dirは存在しません"
fi

変数「dir」に1つ目の変数を格納。
「-d」があるので、変数「dir」が存在し、かつディレクトリで、
「!」があるので、変数「dir」が存在しなければ、if文内が実行され「$dirは存在しません」と表示される。

シェルスクリプトを実行する

$ ./comb-not.sh /home/minecraft/test/

実行結果。

/home/minecraft/test/は存在しません

複数のコマンドを連結する &&

書式

コマンド1 && コマンド2

コマンド1が正常終了した場合(=終了ステータスが0の場合)のみコマンド2を実行する。

&& の例

$ [ -f test.txt ] && cat test.txt

file.txt が存在すれば test.txt の内容を表示させる。

複数のコマンドを連結する ||

書式

コマンド1 || コマンド2

コマンド1が正常終了しなかった場合(=終了ステータスが0以外の場合)のみコマンド2を実行する。

|| の例

$ [ -f test.txt ] || touch test.txt

file.txt が存在しなければ touch コマンドを実行してファイルを作成する。

if 文内で && を使用する例

if文で && を使用することでAND条件を記述することができる。
※「複数のコマンドの終了ステータスがすべて「0」の場合」ということ。

Vimで「comb-if.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

int=$1
if [ "$int" -gt 0 ] && [ "$int" -lt 11 ]; then
  echo "in1 は 1桁の自然数"
fi

シェルスクリプトを実行する

$ ./comb-if.sh 4

実行結果

int1 は 1桁の自然数

シェルスクリプト の一覧