bashプログラミングbashプログラミング:条件テスト条件テスト


整数テスト:数値サイズと等しいかどうかを比較します.
$A-lt$B:より小さいかどうか
$A-gt$B:より大きいかどうか
$A-le$B:以下かどうか
$A-gt$B:以上
$A-eq$B:等しいかどうか
$A-ne$B:等しいかどうか
例:$Aが$B echo$未満?成功を0にする
[root@bogon ~]# A=10
[root@bogon ~]# B=20
[root@bogon ~]# [ $A -lt $B ]
[root@bogon ~]# echo $?
0

例:$Aが$B echo$より大きい?成功を0にする
[root@bogon ~]# A=20
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -gt $B ]
[root@bogon ~]# echo $?
0

例:$Aが$B echo$以上?成功を0にする
[root@bogon ~]# A=20
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -ge $B ]
[root@bogon ~]# echo $?
0

例:$Aが$B echo$以下?成功を0にする
[root@bogon ~]# A=10
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -le $B ]
[root@bogon ~]# echo $?
0

例:$Aは$B echo$に等しい?成功を0にする
[root@bogon ~]# A=10
[root@bogon ~]# B=10
[root@bogon ~]# [ $A -eq $B ]
[root@bogon ~]# echo $?
0

例:$Aは$B echo$に等しくありませんか?成功を0にする
[root@bogon ~]# A=10
[root@bogon ~]# B=20
[root@bogon ~]# [ $A -ne $B ]
[root@bogon ~]# echo $?
0

文字列テスト:ASCII値が大きいほど、文字比較時の値が大きくなります.
「$A」>「$B」:より大きいかどうか
「$A」<「$B」:より小さいかどうか
「$A」=「$B」:等しいかどうか
"$A"!= 「$B」:等しいかどうか
-z'$A':空かどうかを示します
-n'$A':空でないかどうかを示します
備考:文字列の比較をする時、順序によって比較して、アルファベットは後ろで値を代表するほど高くなります
例:$Aが$B echo$未満?成功を0にする
[root@bogon ~]# A=abc
[root@bogon ~]# B=abd
[root@bogon ~]# [[ "$A" < "$B" ]]
[root@bogon ~]# echo $?
0

例:$Bが$A echo$より大きい?成功を0にする
[root@bogon ~]# A=abc
[root@bogon ~]# B=abd
[root@bogon ~]# [[ "$B" > "$A" ]]
[root@bogon ~]# echo $?
0

例:$Aは$B echo$に等しい?成功を0にする
[root@bogon ~]# A=abc
[root@bogon ~]# B=abc
[root@bogon ~]# [[ "$A" == "$B" ]]
[root@bogon ~]# echo $?
0

例:$Aは$B echo$に等しくありませんか?成功を0にする
[root@bogon ~]# A=abc
[root@bogon ~]# B=ab
[root@bogon ~]# [[ "$A" != "$B" ]]
[root@bogon ~]# echo $?
0

例:$Aが空かどうかを判断します.echo$ですか.成功を0にする
[root@bogon ~]# A=
[root@bogon ~]# [ -z $A ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# echo $A
[root@bogon ~]#
例:$Aが空でないかどうかを判断します.echo$ですか.成功を0にする
[root@bogon ~]# A=abc
[root@bogon ~]# [ -n $A ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# echo $A
Abc

ファイルテストファイルテスト:ファイルの存在と属性をテストする
-eまたは-a$file:存在するかどうか、存在するかどうかは「真」、「そうでなければ偽」
-f$file:ファイルが存在し、通常のファイルであるか
-d$file:ファイルが存在し、ディレクトリであるか
-h$file:シンボルリンクファイルが存在するかどうか
-b$file:存在し、ブロックデバイスファイルであるか
-c$file:存在し、文字デバイスファイルであるか
-S$file:存在するかソケットファイル
-p$file:パイプファイルとして存在するかどうか
-r$file:現在のユーザーがファイルに対して読み取り権限を持っているかどうか
-w$file:現在のユーザーがファイルに書き込み権限を持っているかどうか
-x$file:現在のユーザーがファイルに対して実行権限を持っているかどうか
-u$file:ファイルにSUID権限があるかどうか
-g$file:ファイルにSGID権限があるか
-k$file:ファイルにsticky権限があるかどうか
-O$file:現在のユーザーが指定したファイルの所有者であるかどうか
-G$file:現在のユーザーが指定したファイルのグループであるかどうか
例:ファイルが存在するかどうか、存在するかどうかを「真」、「そうでなければ偽」と判断する
[root@bogon ~]# [ -e /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ls /root/file -l
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file
[root@bogon ~]#

例:ファイルが存在し、通常のファイルであるかどうかを判断し、「真」、「そうでなければ偽」
[root@bogon ~]# [ -f /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ls /root/file -l
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file

例:ディレクトリが存在し、通常のファイルであるかどうかを判断し、「真」、「そうでない」を偽とします.
[root@bogon ~]# [ -d /root/ ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll -d /root/
dr-xr-x---. 25 root root 4096 Sep 19 13:12 /root/

例:現在のユーザーがファイルに対する読み取り権限を持っているかどうかを判断します.
[root@bogon ~]# [ -r /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file

例:現在のユーザーがファイルに書き込み権限を持っているかどうかを判断します.
[root@bogon ~]# [ -w /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file

例:現在のユーザーがファイルに対して実行権限を持っているかどうかを判断します.
[root@bogon ~]# chmod +x /root/file
[root@bogon ~]# [ -x /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rwxr-xr-x. 1 root root 0 Sep 19 13:12 /root/file

例:現在のユーザーが指定したファイルの所有者であるかどうかを判断します.
[root@bogon ~]# [ -O /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file

例:現在のユーザーが指定したファイルのグループであるかどうかを判断します.
[root@bogon ~]# [ -G /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file

例:ファイルにSUID権限があるかどうかを判断する
[root@bogon ~]# ll /root/file
-rw-r--r--. 1 root root 0 Sep 19 13:12 /root/file
[root@bogon ~]# chmod 4644 /root/file
[root@bogon ~]# [ -u /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rwSr--r--. 1 root root 0 Sep 19 13:12 /root/file

例:ファイルにSGID権限があるかどうかを判断する
[root@bogon ~]# chmod 2644 /root/file
[root@bogon ~]# [ -g /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r-Sr--. 1 root root 0 Sep 19 13:12 /root/file

例:ファイルにsticky権限があるかどうかを判断する
[root@bogon ~]# chmod 1644 /root/file
[root@bogon ~]# [ -k /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# ll /root/file
-rw-r--r-T. 1 root root 0 Sep 19 13:12 /root/file

双眼オペレータ:
$file 1-nt$file 2:file 1がfile 2より新しいかどうか、file 1の最近の変更タイムスタンプがfile 2より遅いかどうか
$file 1-ot$file 2:file 1がfile 2より古いかどうか、file 1の最近の変更タイムスタンプがfile 2より早いかどうか
$file 1-ef$file 2:file 1とfile 2が同じinodeを指しているかどうか.両方が同じファイルのハードリンクであるかどうかをテストします.
組合せテスト条件:論理演算、式の組合せ、コマンドの組合せ
論理演算:
と:複数の条件を同時に満たす
または:複数の条件が1つを満たす場合
非:指定した条件を反転
式の組み合わせ:
と:ファイルが存在し、通常のファイルであることを判断する
[root@bogon ~]# [ -e /root/file -a -f /root/file ]
[root@bogon ~]# echo $?
0

または:判断ファイルが通常ファイルまたはディレクトリファイル
[root@bogon ~]# [ -d /root/file -o -f /root/file ]
[root@bogon ~]# echo $?
0

非:判定ファイルがディレクトリファイルではない
[root@bogon ~]# [ ! -d /root/file ]
[root@bogon ~]# echo $?
0

コマンドの組み合わせ:
与:COMMAND 1&&COMMAND 2 COMMAND 1実行成功後COMMAND 2実行
[root@bogon ~]# touch file && ll file
-rw-r--r-T. 1 root root 0 Sep 19 14:36 file

または:COMMAND 1 COMMAND 2 COMMAND 1の実行に失敗した後にCOMMAND 2を実行する
[root@bogon ~]# id alice || useradd alice
id: alice: No such user
[root@bogon ~]# id alice
uid=511(alice) gid=511(alice) groups=511(alice)

非:!COMMANDは命令に対して反対を取る
[root@bogon ~]# [ -f /root/file ]
[root@bogon ~]# echo $?
0
[root@bogon ~]# [ ! -f /root/file ]
[root@bogon ~]# echo $?
1

ショートオペレータ:
&&:COMMAND 1&&COMMAND 2 COMMAND 1実行成功後COMMAND 2実行
|:COMMAND 1|COMMAND 2 COMMAND 1の実行に失敗した後にCOMMAND 2を実行する
!COMMAND:命令に対して反対を取る