ひとり勉強ログ

ITエンジニアの勉強したことメモ

#10 演算子の結合

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

演算子の結合の例1

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

!/bin/bash

dir=$1

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

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

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

[bash] $ ./comb-and.sh /home/minecraft/bin/ [/bash] 実行結果。 [bash] /home/minecraft/bin/はディレクトリで読み取りパーミッションがある [/bash]

演算子の結合の例2

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

!/bin/bash

dir=$1

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

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

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

[bash] $ ./comb-not.sh /home/minecraft/test/ [/bash] 実行結果。 [bash] /home/minecraft/test/は存在しません [/bash]

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

書式

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

&& の例

[bash] $ [ -f test.txt ] && cat test.txt [/bash] file.txt が存在すれば test.txt の内容を表示させる。

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

書式

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

|| の例

[bash] $ [ -f test.txt ] || touch test.txt [/bash] file.txt が存在しなければ touch コマンドを実行してファイルを作成する。

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

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

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

!/bin/bash

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

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

[bash] $ ./comb-if.sh 4 [/bash] 実行結果 [bash] int1 は 1桁の自然数 [/bash]