Last Update 2022/12/10
条件式
テスト項目
(01) -a ファイル
[ファイル]が存在する場合はtrue
(02) -b ファイル
[ファイル]が存在し、ブロック特殊ファイルであればtrue
(03) -c ファイル
[ファイル]が存在し、キャラクタ特殊ファイルであればtrue
(04) -d ファイル
[ファイル]が存在し、ディレクトリであればtrue
(05) -e ファイル
[ファイル]が存在する場合はtrue
(06) -f ファイル
[ファイル]が存在し、通常ファイルであればtrue
(07) -g ファイル
[ファイル]が存在し、set-group-idであればtrue
(08) -h ファイル
[ファイル]が存在し、シンボリックリンクであればtrue
(09) -k ファイル
[ファイル]が存在し、「sticky」ビットが設定されていればtrue
(10) -p ファイル
[ファイル]が存在し、名前付きパイプ(FIFO)であればtrue
(11) -r ファイル
[ファイル]が存在し、読み取り可能であればtrue
(12) -s ファイル
[ファイル]が存在し、サイズが0より大きければtrue
(13) -t ファイルディスクリプタ
[ファイルディスクリプタ]がオープンで、端末を参照している場合はtrue
(14) -u ファイル
[ファイル]が存在し、set-user-idビットが設定されている場合はtrue
(15) -w ファイル
[ファイル]が存在し、書き込み可能であればtrue
(16) -x ファイル
[ファイル]が存在し、実行可能であればtrue
(17) -G ファイル
[ファイル]が存在し、実効グループIDに所有されている場合はtrue
(18) -L ファイル
[ファイル]が存在し、シンボリックリンクであればtrue
(19) -O ファイル
[ファイル]が存在し、実効ユーザーIDに所有されている場合はtrue
(20) -S ファイル
[ファイル]が存在し、ソケットであればtrue
(21) ファイル1 -ef ファイル2
[ファイル1]と[ファイル2]が同じデバイスとinode番号を参照している場合はtrue
(22) ファイル1 -nt ファイル2
[ファイル1]が[ファイル2]よりも新しい場合、または[ファイル1]が存在し、[ファイル2]が存在しない場合はtrue
(23) ファイル1 -ot ファイル2
[ファイル1]が[ファイル2]よりも古い場合、または[ファイル2]が存在し、[ファイル1]が存在しない場合はtrue
(24) -o シェルオプション
[シェルオプション]が有効であればtrue
(25) -v 変数名
[変数名]が設定されている場合はtrue
(26) -R 変数名
[変数名]が設定され、名前参照である場合はtrue
(27) -z 文字列
[文字列]の長さが0の場合はtrue
(28) -n 文字列
[文字列]の長さが0ではない場合はtrue
(29) 文字列1 == 文字列2
[文字列1]と[文字列2]が等しい場合はtrue
(30) 文字列1 != 文字列2
[文字列1]と[文字列2]が等くない場合はtrue
(31) 文字列1 < 文字列2
[文字列1]が[文字列2]より辞書順で前になる場合はtrue
(32) 文字列1 > 文字列2
[文字列1]が[文字列2]より辞書順で後になる場合はtrue
(33) 整数値に関する算術演算子
-eq -ne -lt -le -gt -ge
[ファイル]が存在する場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -a"
if [[ -a /usr/include/stdio.h ]]; then
echo "stdio.hは存在する"
else
echo "stdio.hは存在しない"
fi
if [[ -a /usr/include/stdio2.h ]]; then
echo "stdio2.hは存在する"
else
echo "stdio2.hは存在しない"
fi
echo
実行結果
$ ./sample.sh
条件式 -a
stdio.hは存在する <--- 存在する場合はtrue
stdio2.hは存在しない
[ファイル]が存在し、ブロック特殊ファイルであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -b"
if [[ -b /dev/sr0 ]]; then
echo "/dev/sr0についての結果はtrue"
else
echo "/dev/sr0についての結果はfalse"
fi
if [[ -b /dev/sr1 ]]; then
echo "/dev/sr1についての結果はtrue"
else
echo "/dev/sr1についての結果はfalse"
fi
if [[ -b /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
実行結果
$ ls -l /dev/sr*
brw-rw---- 1 root cdrom 11, 0 Aug 31 00:49 /dev/sr0 <--- ブロック特殊ファイル
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -b
/dev/sr0についての結果はtrue <--- 存在し、ブロック特殊ファイルなのでtrue
/dev/sr1についての結果はfalse <--- 存在しないのでfalse
/usr/include/stdio.hについての結果はfalse <--- 存在するが、ブロック特殊ファイルではないのでfalse
[ファイル]が存在し、キャラクタ特殊ファイルであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -c"
if [[ -c /dev/null ]]; then
echo "/dev/nullについての結果はtrue"
else
echo "/dev/nullについての結果はfalse"
fi
if [[ -c /dev/nullnull ]]; then
echo "/dev/nullnullについての結果はtrue"
else
echo "/dev/nullnullについての結果はfalse"
fi
if [[ -c /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
実行結果
$ ls -l /dev/nu*
crw-rw-rw- 1 root root 1, 3 Aug 31 09:29 /dev/null <--- キャラクタ特殊ファイル
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -c
/dev/nullについての結果はtrue <--- 存在し、キャラクタ特殊ファイルなのでtrue
/dev/nullnullについての結果はfalse <--- 存在しないのでfalse
/usr/include/stdio.hについての結果はfalse <--- 存在するが、キャラクタ特殊ファイルではないのでfalse
[ファイル]が存在し、ディレクトリであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -d"
if [[ -d /usr/local ]]; then
echo "/usr/localについての結果はtrue"
else
echo "/usr/localについての結果はfalse"
fi
if [[ -d /usr/local2 ]]; then
echo "/usr/local2についての結果はtrue"
else
echo "/usr/local2についての結果はfalse"
fi
if [[ -d /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
実行結果
$ ls -l /usr/local/
total 64
drwxr-xr-x 2 root root 20480 Feb 23 2022 bin
drwxr-xr-x 60 root root 12288 Apr 29 2019 include
drwxr-xr-x 33 root root 12288 Jan 15 2022 lib
drwxr-xr-x 8 root root 4096 Jan 19 2019 libexec
drwxr-xr-x 9 root root 4096 Jan 19 2019 local <--- ディレクトリ
drwxr-xr-x 2 root root 4096 Jan 19 2019 sbin
drwxr-xr-x 53 root root 4096 Jan 19 2019 share
drwxr-xr-x 2 root root 4096 Jan 5 2019 src
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -d
/usr/localについての結果はtrue <--- 存在し、ディレクトリなのでtrue
/usr/local2についての結果はfalse <--- 存在しないのでfalse
/usr/include/stdio.hについての結果はfalse <--- 存在するが、ディレクトリではないのでfalse
[ファイル]が存在する場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -e"
if [[ -e /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
if [[ -e /usr/include/stdio2.h ]]; then
echo "/usr/include/stdio2.hについての結果はtrue"
else
echo "/usr/include/stdio2.hについての結果はfalse"
fi
if [[ -e /usr/local ]]; then
echo "/usr/localについての結果はtrue"
else
echo "/usr/localについての結果はfalse"
fi
実行結果
$ ls -l /usr/local/
total 64
drwxr-xr-x 2 root root 20480 Feb 23 2022 bin
drwxr-xr-x 60 root root 12288 Apr 29 2019 include
drwxr-xr-x 33 root root 12288 Jan 15 2022 lib
drwxr-xr-x 8 root root 4096 Jan 19 2019 libexec
drwxr-xr-x 9 root root 4096 Jan 19 2019 local <--- ディレクトリ
drwxr-xr-x 2 root root 4096 Jan 19 2019 sbin
drwxr-xr-x 53 root root 4096 Jan 19 2019 share
drwxr-xr-x 2 root root 4096 Jan 5 2019 src
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -e
/usr/include/stdio.hについての結果はtrue <--- 存在する場合はtrue
/usr/include/stdio2.hについての結果はfalse <--- 存在しないのでfalse
/usr/localについての結果はtrue <--- ディレクトリでも存在する場合はtrue
[ファイル]が存在し、通常ファイルであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -f"
if [[ -f /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
if [[ -f /usr/include/stdio2.h ]]; then
echo "/usr/include/stdio2.hについての結果はtrue"
else
echo "/usr/include/stdio2.hについての結果はfalse"
fi
if [[ -f /usr/local ]]; then
echo "/usr/localについての結果はtrue"
else
echo "/usr/localについての結果はfalse"
fi
実行結果
$ ls -l /usr/local/
total 64
drwxr-xr-x 2 root root 20480 Feb 23 2022 bin
drwxr-xr-x 60 root root 12288 Apr 29 2019 include
drwxr-xr-x 33 root root 12288 Jan 15 2022 lib
drwxr-xr-x 8 root root 4096 Jan 19 2019 libexec
drwxr-xr-x 9 root root 4096 Jan 19 2019 local <--- ディレクトリ
drwxr-xr-x 2 root root 4096 Jan 19 2019 sbin
drwxr-xr-x 53 root root 4096 Jan 19 2019 share
drwxr-xr-x 2 root root 4096 Jan 5 2019 src
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -f
/usr/include/stdio.hについての結果はtrue <--- 存在し、通常ファイルの場合はtrue
/usr/include/stdio2.hについての結果はfalse <--- 存在しないのでfalse
/usr/localについての結果はfalse <--- 存在するが、通常ファイルではないのでfalse
[ファイル]が存在し、set-group-idであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -g"
if [[ -g sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -g sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
実行結果
$ ls -l
total 44
-rwxr-xr-x 1 testusr testusr 18480 Sep 1 16:53 sample1 <--- 通常ファイル
-rwxr-sr-x 1 testusr testusr 18480 Sep 1 16:52 sample2 <--- set-group-id
-rwxr-xr-x 1 testusr testusr 283 Sep 1 22:16 sample.sh
$ ./sample.sh
条件式 -g
sample1についての結果はfalse <--- 存在するが、set-group-idではないのでfalse
sample2についての結果はtrue <--- 存在し、set-group-idであるためtrue
[ファイル]が存在し、シンボリックリンクであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -h"
if [[ -h /usr/bin/vi ]]; then
echo "/usr/bin/viについての結果はtrue"
else
echo "/usr/bin/viについての結果はfalse"
fi
if [[ -h /usr/bin/vi2 ]]; then
echo "/usr/bin/vi2についての結果はtrue"
else
echo "/usr/bin/vi2についての結果はfalse"
fi
if [[ -h /usr/bin/vim ]]; then
echo "/usr/bin/vimについての結果はtrue"
else
echo "/usr/bin/vimについての結果はfalse"
fi
実行結果
$ ls -l /usr/bin/vi*
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/vi -> vim <--- シンボリックリンク
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/view -> vim
-rwxr-xr-x 1 root root 2421184 Jan 11 2019 /usr/bin/vim <--- 通常ファイル
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/vimdiff -> vim
-rwxr-xr-x 1 root root 2121 Jan 11 2019 /usr/bin/vimtutor
$ ./sample.sh
条件式 -h
/usr/bin/viについての結果はtrue <--- 存在し、シンボリックリンクであるためtrue
/usr/bin/vi2についての結果はfalse <--- 存在しないためfalse
/usr/bin/vimについての結果はfalse <--- 存在するが、シンボリックリンクではないのでfalse
[ファイル]が存在し、「sticky」ビットが設定されていればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -k"
if [[ -k sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -k sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
実行結果
$ ls -l
total 44
-rwxr-xr-x 1 testusr testusr 18480 Sep 1 16:53 sample1 <--- 通常ファイル
-rwxr-xr-t 1 testusr testusr 18480 Sep 1 16:52 sample2 <--- 「sticky」ビットが設定されているファイル
-rwxr-xr-x 1 testusr testusr 283 Sep 2 09:30 sample.sh
$ ./sample.sh
条件式 -k
sample1についての結果はfalse <--- 存在するが、「sticky」ビットが設定されていないのでfalse
sample2についての結果はtrue <--- 存在し、「sticky」ビットが設定されているのでtrue
[ファイル]が存在し、名前付きパイプ(FIFO)であればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
# 名前付きパイプを作成
mkfifo sample2
ls -l
echo "条件式 -p"
if [[ -p sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -p sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
# 名前付きパイプを削除
rm sample2
実行結果
$ ./sample.sh
total 24
-rwxr-xr-x 1 testusr testusr 18480 Sep 1 16:53 sample1 <--- 通常ファイル
prw-rw-r-- 1 testusr testusr 0 Sep 2 11:55 sample2 <--- 名前付きパイプ
-rwxr-xr-x 1 testusr testusr 384 Sep 2 11:01 sample.sh
条件式 -p
sample1についての結果はfalse <--- 存在するが、名前付きパイプではないのでfalse
sample2についての結果はtrue <--- 存在し、名前付きパイプなのでtrue
[ファイル]が存在し、読み取り可能であればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -r"
if [[ -r sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -r sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
if [[ -r sample3 ]]; then
echo "sample3についての結果はtrue"
else
echo "sample3についての結果はfalse"
fi
実行結果
$ ls -l
total 64
-rwxr-xr-x 1 testusr testusr 18480 Sep 1 16:53 sample1 <--- 読み取り可能
-rwx------ 1 root root 18480 Sep 2 13:47 sample2 <--- 所有者(root)のみ読み取り可能
-rwx------ 1 testusr testusr 18480 Sep 2 13:58 sample3 <--- 所有者(testusr)のみ読み取り可能
-rwxr-xr-x 1 testusr testusr 407 Sep 2 13:59 sample.sh
$ ./sample.sh <--- testusrで実行
条件式 -r
sample1についての結果はtrue <--- 存在し、読み取り可能なのでtrue
sample2についての結果はfalse <--- 存在するが、所有者(root)以外読み取り不能なのでfalse
sample3についての結果はtrue <--- 存在し、testusrは読み取り可能なのでtrue
[ファイル]が存在し、サイズが0より大きければtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -s"
if [[ -s sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -s sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
実行結果
$ ls -l
total 24
-rwxr-xr-x 1 testusr testusr 18480 Sep 3 12:46 sample1 <--- サイズが0より大きいファイル
-rwxr-xr-x 1 testusr testusr 0 Sep 3 12:46 sample2 <--- サイズが0のファイル
-rwxr-xr-x 1 testusr testusr 283 Sep 3 13:25 sample.sh
$ ./sample.sh
条件式 -s
sample1についての結果はtrue <--- 存在し、サイズが0より大きいのでtrue
sample2についての結果はfalse <--- 存在し、サイズが0なのでtrue
[ファイルディスクリプタ]がオープンで、端末を参照している場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -t"
echo
echo "端末デバイスを表示"
tty
echo
echo "fd 4 オープン前"
echo "ls -l /proc/self/fd/"
ls -l /proc/self/fd/
echo
if [[ -t 1 ]]; then
echo "fd 1 (標準出力) についての結果はtrue"
else
echo "fd 1 (標準出力) についての結果はfalse"
fi
if [[ -t 2 ]]; then
echo "fd 2 (標準エラー出力) についての結果はtrue"
else
echo "fd 2 (標準エラー出力) についての結果はfalse"
fi
echo
exec 4>sample.txt
echo "fd 4 をsample.txtへのリダイレクトとして指定"
echo "ls -l /proc/self/fd/"
ls -l /proc/self/fd/
if [[ -t 4 ]]; then
echo "fd 4 (sample.txt) についての結果はtrue"
else
echo "fd 4 (sample.txt) についての結果はfalse"
fi
echo
exec 4>&1
echo "fd 4 を標準出力へのリダイレクトとして指定"
echo "ls -l /proc/self/fd/"
ls -l /proc/self/fd/
if [[ -t 4 ]]; then
echo "fd 4 (標準出力) についての結果はtrue"
else
echo "fd 4 (標準出力) についての結果はfalse"
fi
# fd 4 を閉じる
exec 4>&-
実行結果
$ ./sample.sh
条件式 -t
端末デバイスを表示
/dev/pts/0 <--- 端末デバイス
fd 4 オープン前
ls -l /proc/self/fd/
total 0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 0 -> /dev/pts/0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 1 -> /dev/pts/0 <--- 標準出力
lrwx------ 1 testusr testusr 64 Sep 3 23:56 2 -> /dev/pts/0 <--- 標準エラー出力
lr-x------ 1 testusr testusr 64 Sep 3 23:56 3 -> /proc/767/fd
fd 1 (標準出力) についての結果はtrue
fd 2 (標準エラー出力) についての結果はtrue
fd 4 をsample.txtへのリダイレクトとして指定
ls -l /proc/self/fd/
total 0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 0 -> /dev/pts/0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 1 -> /dev/pts/0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 2 -> /dev/pts/0
lr-x------ 1 testusr testusr 64 Sep 3 23:56 3 -> /proc/768/fd
l-wx------ 1 testusr testusr 64 Sep 3 23:56 4 -> /home/testusr/sample.txt <--- sample.txtへのリダイレクト
fd 4 (sample.txt) についての結果はfalse <--- 端末を参照していないためfalse
fd 4 を標準出力へのリダイレクトとして指定
ls -l /proc/self/fd/
total 0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 0 -> /dev/pts/0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 1 -> /dev/pts/0
lrwx------ 1 testusr testusr 64 Sep 3 23:56 2 -> /dev/pts/0
lr-x------ 1 testusr testusr 64 Sep 3 23:56 3 -> /proc/769/fd
lrwx------ 1 testusr testusr 64 Sep 3 23:56 4 -> /dev/pts/0 <--- 標準出力へのリダイレクト
fd 4 (標準出力) についての結果はtrue <--- 端末を参照しているためtrue
[ファイル]が存在し、set-user-idビットが設定されている場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -u"
if [[ -u /bin/passwd ]]; then
echo "/bin/passwdについての結果はtrue"
else
echo "/bin/passwdについての結果はfalse"
fi
if [[ -u /bin/ps ]]; then
echo "/bin/psについての結果はtrue"
else
echo "/bin/psについての結果はfalse"
fi
実行結果
$ ls -l /bin/passwd
-rwsr-xr-x 1 root root 68696 Jan 11 2019 /bin/passwd <--- set-user-idビットが設定されたファイル
$ ls -l /bin/ps
-rwxr-xr-x 1 root root 101240 Jan 11 2019 /bin/ps <--- 通常ファイル
$ ./sample.sh
条件式 -u
/bin/passwdについての結果はtrue <--- 存在し、set-user-idビットが設定されているのでtrue
/bin/psについての結果はfalse <--- set-user-idビットが設定されていない場合はfalse
[ファイル]が存在し、書き込み可能であればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -w"
if [[ -w sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -w sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
if [[ -w sample3 ]]; then
echo "sample3についての結果はtrue"
else
echo "sample3についての結果はfalse"
fi
実行結果
$ ls -l
total 64
-rwxrwxrwx 1 testusr testusr 18480 Sep 3 12:46 sample1 <--- 書き込み可能
-rwx------ 1 root root 18480 Sep 4 21:31 sample2 <--- 所有者(root)のみ書き込み可能
-rwx------ 1 testusr testusr 18480 Sep 4 21:31 sample3 <--- 所有者(testusr)のみ書き込み可能
-rwxr-xr-x 1 testusr testusr 425 Sep 4 21:30 sample.sh
$ ./sample.sh <--- testusrで実行
条件式 -w
sample1についての結果はtrue <--- 存在し、書き込み可能なのでtrue
sample2についての結果はfalse <--- 存在するが、所有者(root)以外書き込み不能なのでfalse
sample3についての結果はtrue <--- 存在し、testusrは書き込み可能なのでtrue
[ファイル]が存在し、実行可能であればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -x"
if [[ -x sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -x sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
if [[ -x sample3 ]]; then
echo "sample3についての結果はtrue"
else
echo "sample3についての結果はfalse"
fi
実行結果
$ ls -l
total 64
-rwxrwxrwx 1 testusr testusr 18480 Sep 3 12:46 sample1 <--- 実行可能
-rwx------ 1 root root 18480 Sep 4 21:31 sample2 <--- 所有者(root)のみ実行可能
-rwx------ 1 testusr testusr 18480 Sep 4 21:31 sample3 <--- 所有者(testusr)のみ実行可能
-rwxr-xr-x 1 testusr testusr 425 Sep 5 12:15 sample.sh
$ ./sample.sh <--- testusrで実行
条件式 -x
sample1についての結果はtrue <--- 存在し、実行可能なのでtrue
sample2についての結果はfalse <--- 存在するが、所有者(root)以外実行不能なのでfalse
sample3についての結果はtrue <--- 存在し、testusrは実行可能なのでtrue
[ファイル]が存在し、実効グループIDに所有されている場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "idコマンド実行"
id
echo
echo "条件式 -G"
if [[ -G sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -G sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
if [[ -G sample3 ]]; then
echo "sample3についての結果はtrue"
else
echo "sample3についての結果はfalse"
fi
実行結果
$ su <--- 以降rootユーザーで実行
Password:
# ls -l
total 64
-rwxr-xr-x 1 testusr testusr 18480 Sep 3 12:46 sample1 <--- 所有グループ testusr
-rwxr-xr-x 1 root root 18480 Sep 4 21:31 sample2 <--- 所有グループ root
-rwxr-xr-x 1 testusr testgroup 18480 Sep 4 21:31 sample3 <--- 所有グループ testgroup
-rwxr-xr-x 1 testusr testusr 462 Sep 5 17:22 sample.sh
# sg testusr ./sample.sh <--- [グループ:testusr]で実行
idコマンド実行
uid=0(root) gid=1001(testusr) groups=1001(testusr),0(root)
条件式 -G
sample1についての結果はtrue <--- [グループ:testusr]所有のファイルはtrue
sample2についての結果はfalse
sample3についての結果はfalse
# ./sample.sh <--- [グループ:root]で実行
idコマンド実行
uid=0(root) gid=0(root) groups=0(root)
条件式 -G
sample1についての結果はfalse
sample2についての結果はtrue <--- [グループ:root]所有のファイルはtrue
sample3についての結果はfalse
# sg testgroup ./sample.sh <--- [グループ:testgroup]で実行
idコマンド実行
uid=0(root) gid=1002(testgroup) groups=1002(testgroup),0(root)
条件式 -G
sample1についての結果はfalse
sample2についての結果はfalse
sample3についての結果はtrue <--- [グループ:testgroup]所有のファイルはtrue
[ファイル]が存在し、シンボリックリンクであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -L"
if [[ -L /usr/bin/vi ]]; then
echo "/usr/bin/viについての結果はtrue"
else
echo "/usr/bin/viについての結果はfalse"
fi
if [[ -L /usr/bin/vi2 ]]; then
echo "/usr/bin/vi2についての結果はtrue"
else
echo "/usr/bin/vi2についての結果はfalse"
fi
if [[ -L /usr/bin/vim ]]; then
echo "/usr/bin/vimについての結果はtrue"
else
echo "/usr/bin/vimについての結果はfalse"
fi
実行結果
$ ls -l /usr/bin/vi*
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/vi -> vim <--- シンボリックリンク
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/view -> vim
-rwxr-xr-x 1 root root 2421184 Jan 11 2019 /usr/bin/vim <--- 通常ファイル
lrwxrwxrwx 1 root root 3 Jan 11 2019 /usr/bin/vimdiff -> vim
-rwxr-xr-x 1 root root 2121 Jan 11 2019 /usr/bin/vimtutor
$ ./sample.sh
条件式 -L
/usr/bin/viについての結果はtrue <--- 存在し、シンボリックリンクであるためtrue
/usr/bin/vi2についての結果はfalse <--- 存在しないためfalse
/usr/bin/vimについての結果はfalse <--- 存在するが、シンボリックリンクではないのでfalse
[ファイル]が存在し、実効ユーザーIDに所有されている場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "idコマンド実行"
id
echo
echo "条件式 -O"
if [[ -O sample1 ]]; then
echo "sample1についての結果はtrue"
else
echo "sample1についての結果はfalse"
fi
if [[ -O sample2 ]]; then
echo "sample2についての結果はtrue"
else
echo "sample2についての結果はfalse"
fi
if [[ -O sample3 ]]; then
echo "sample3についての結果はtrue"
else
echo "sample3についての結果はfalse"
fi
実行結果
$ su <--- 以降rootユーザーで実行
Password:
# ls -l
total 64
-rwxr-xr-x 1 testusr testusr 18480 Sep 3 12:46 sample1 <--- 所有ユーザー testusr
-rwxr-xr-x 1 root root 18480 Sep 4 21:31 sample2 <--- 所有ユーザー root
-rwxr-xr-x 1 testusr2 testusr2 18480 Sep 4 21:31 sample3 <--- 所有ユーザー testusr2
-rwxr-xr-x 1 testusr testusr 462 Sep 6 09:41 sample.sh
# su testusr ./sample.sh <--- [ユーザー:testusr]で実行
idコマンド実行
uid=1001(testusr) gid=1001(testusr) groups=1001(testusr),1002(testgroup)
条件式 -O
sample1についての結果はtrue <--- [ユーザー:testusr]所有のファイルはtrue
sample2についての結果はfalse
sample3についての結果はfalse
# ./sample.sh <--- [ユーザー:root]で実行
idコマンド実行
uid=0(root) gid=0(root) groups=0(root)
条件式 -O
sample1についての結果はfalse
sample2についての結果はtrue <--- [ユーザー:root]所有のファイルはtrue
sample3についての結果はfalse
# su testusr2 ./sample.sh
idコマンド実行
uid=1002(testusr2) gid=1003(testusr2) groups=1003(testusr2)
条件式 -O
sample1についての結果はfalse
sample2についての結果はfalse
sample3についての結果はtrue <--- [ユーザー:testusr2]所有のファイルはtrue
[ファイル]が存在し、ソケットであればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -S"
if [[ -S /run/systemd/journal/dev-log ]]; then
echo "/run/systemd/journal/dev-logについての結果はtrue"
else
echo "/run/systemd/journal/dev-logについての結果はfalse"
fi
if [[ -S /run/systemd/journal/dev-log2 ]]; then
echo "/run/systemd/journal/dev-log2についての結果はtrue"
else
echo "/run/systemd/journal/dev-log2についての結果はfalse"
fi
if [[ -S /usr/include/stdio.h ]]; then
echo "/usr/include/stdio.hについての結果はtrue"
else
echo "/usr/include/stdio.hについての結果はfalse"
fi
実行結果
$ ls -l /run/systemd/journal/dev-log
srw-rw-rw- 1 root root 0 Sep 6 09:21 /run/systemd/journal/dev-log <--- ソケット
$ ls -l /usr/include/stdio.h
-rw-r--r-- 1 root root 30168 Jan 5 2019 /usr/include/stdio.h <--- 通常ファイル
$ ./sample.sh
条件式 -S
/run/systemd/journal/dev-logについての結果はtrue <--- 存在し、ソケットなのでtrue
/run/systemd/journal/dev-log2についての結果はfalse <--- 存在しないのでfalse
/usr/include/stdio.hについての結果はfalse <--- 存在するが、ソケットではないのでfalse
[ファイル1]と[ファイル2]が同じデバイスとinode番号を参照している場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -ef"
if [[ sample1.txt -ef sample1.txt ]]; then
echo "sample1.txt -ef sample1.txt についての結果はtrue"
else
echo "sample1.txt -ef sample1.txt についての結果はfalse"
fi
if [[ sample1.txt -ef sample2 ]]; then
echo "sample1.txt -ef sample2 についての結果はtrue"
else
echo "sample1.txt -ef sample2 についての結果はfalse"
fi
if [[ sample1.txt -ef sample3 ]]; then
echo "sample1.txt -ef sample3 についての結果はtrue"
else
echo "sample1.txt -ef sample3 についての結果はfalse"
fi
if [[ sample1.txt -ef sample4.txt ]]; then
echo "sample1.txt -ef sample4.txt についての結果はtrue"
else
echo "sample1.txt -ef sample4.txt についての結果はfalse"
fi
実行結果
$ ls -li
total 16
395722 -rw-rw-r-- 2 testusr testusr 5 Sep 6 16:56 sample1.txt
395722 -rw-rw-r-- 2 testusr testusr 5 Sep 6 16:56 sample2 <--- sample1.txtへのハードリンク
395529 lrwxrwxrwx 1 testusr testusr 11 Sep 6 16:57 sample3 -> sample1.txt <--- sample1.txtへのシンボリックリンク
395766 -rw-rw-r-- 1 testusr testusr 5 Sep 6 17:23 sample4.txt <--- sample1.txtに関連の無いファイル
395776 -rwxr-xr-x 1 testusr testusr 768 Sep 6 17:24 sample.sh
$ ./sample.sh
条件式 -ef
sample1.txt -ef sample1.txt についての結果はtrue <--- sample1.txtそのもののinodeを参照しているためtrue
sample1.txt -ef sample2 についての結果はtrue <--- sample1.txtへのハードリンクで同じinodeを参照しているためtrue
sample1.txt -ef sample3 についての結果はtrue <--- sample1.txtへのシンボリックリンクもtrue
sample1.txt -ef sample4.txt についての結果はfalse <--- sample1.txtを一切参照しないファイルはfalse
[ファイル1]が[ファイル2]よりも新しい場合、または[ファイル1]が存在し、[ファイル2]が存在しない場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -nt"
if [[ sample1.txt -nt sample2.txt ]]; then
echo "sample1.txt -nt sample2.txt についての結果はtrue"
else
echo "sample1.txt -nt sample2.txt についての結果はfalse"
fi
if [[ sample3.txt -nt sample2.txt ]]; then
echo "sample2.txt -nt sample3.txt についての結果はtrue"
else
echo "sample2.txt -nt sample3.txt についての結果はfalse"
fi
if [[ sample2.txt -nt sample4.txt ]]; then
echo "sample2.txt -nt sample4.txt についての結果はtrue"
else
echo "sample2.txt -nt sample4.txt についての結果はfalse"
fi
実行結果
$ ls -l
total 16
-rw-rw-r-- 1 testusr testusr 5 Sep 6 16:56 sample1.txt <--- 更新日時が最も古いファイル
-rw-rw-r-- 1 testusr testusr 5 Sep 6 22:45 sample2.txt
-rw-rw-r-- 1 testusr testusr 9 Sep 6 23:10 sample3.txt <--- 更新日時が最も新しいファイル
-rwxr-xr-x 1 testusr testusr 602 Sep 6 23:28 sample.sh
$ ./sample.sh
条件式 -nt
sample1.txt -nt sample2.txt についての結果はfalse <--- sample1.txtはsample2.txtより古いのでfalse
sample3.txt -nt sample2.txt についての結果はtrue <--- sample3.txtはsample2.txtより新しいのでtrue
sample2.txt -nt sample4.txt についての結果はtrue <--- sample2.txtは存在し、sample4.txtは存在しないのでtrue
[ファイル1]が[ファイル2]よりも古い場合、または[ファイル2]が存在し、[ファイル1]が存在しない場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -ot"
if [[ sample1.txt -ot sample2.txt ]]; then
echo "sample1.txt -ot sample2.txt についての結果はtrue"
else
echo "sample1.txt -ot sample2.txt についての結果はfalse"
fi
if [[ sample3.txt -ot sample2.txt ]]; then
echo "sample3.txt -ot sample2.txt についての結果はtrue"
else
echo "sample3.txt -ot sample2.txt についての結果はfalse"
fi
if [[ sample4.txt -ot sample2.txt ]]; then
echo "sample4.txt -ot sample2.txt についての結果はtrue"
else
echo "sample4.txt -ot sample2.txt についての結果はfalse"
fi
実行結果
$ ls -l
total 16
-rw-rw-r-- 1 testusr testusr 5 Sep 6 16:56 sample1.txt <--- 更新日時が最も古いファイル
-rw-rw-r-- 1 testusr testusr 5 Sep 6 22:45 sample2.txt
-rw-rw-r-- 1 testusr testusr 9 Sep 6 23:10 sample3.txt <--- 更新日時が最も新しいファイル
-rwxr-xr-x 1 testusr testusr 602 Sep 8 15:54 sample.sh
$ ./sample.sh
条件式 -ot
sample1.txt -ot sample2.txt についての結果はtrue <--- sample1.txtはsample2.txtより古いのでtrue
sample3.txt -ot sample2.txt についての結果はfalse <--- sample3.txtはsample2.txtより新しいのでfalsee
sample4.txt -ot sample2.txt についての結果はtrue <--- sample2.txtは存在し、sample4.txtは存在しないのでtrue
[シェルオプション]が有効であればtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "set -o による出力"
set -o
echo
echo "条件式 -o による判定結果"
declare -a opt
for a in $(set -o)
do
if [[ $a != "on" ]] && [[ $a != "off" ]]; then
if [[ -o "$a" ]]; then
echo "$a on"
else
echo "$a off"
fi
fi
done
実行結果
$ ./sample.sh
set -o による出力
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand off
history off
ignoreeof off
interactive-comments on
keyword off
monitor off
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
条件式 -o による判定結果
allexport off
braceexpand on
emacs off
errexit off
errtrace off
functrace off
hashall on
histexpand off
history off
ignoreeof off
interactive-comments on
keyword off
monitor off
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
[変数名]が設定されている場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -v"
SAMPLEVAR1="abc"
SAMPLEVAR2=
echo "\$SAMPLEVAR1 = $SAMPLEVAR1"
echo "\$SAMPLEVAR2 = $SAMPLEVAR2"
if [[ -v SAMPLEVAR1 ]]; then
echo "-v SAMPLEVAR1 についての結果はtrue"
else
echo "-v SAMPLEVAR1 についての結果はfalse"
fi
if [[ -v SAMPLEVAR2 ]]; then
echo "-v SAMPLEVAR2 についての結果はtrue"
else
echo "-v SAMPLEVAR2 についての結果はfalse"
fi
if [[ -v SAMPLEVAR3 ]]; then
echo "-v SAMPLEVAR3 についての結果はtrue"
else
echo "-v SAMPLEVAR3 についての結果はfalse"
fi
実行結果
$ ./sample.sh
条件式 -v
$SAMPLEVAR1 = abc
$SAMPLEVAR2 =
-v SAMPLEVAR1 についての結果はtrue <--- 変数に値がセットされているためtrue
-v SAMPLEVAR2 についての結果はtrue <--- セットされた値が「空」の場合でもtrue
-v SAMPLEVAR3 についての結果はfalse <--- 変数が未設定の場合はfalse
[変数名]が設定され、名前参照である場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
samplefunc1()
{
# 引数として変数名を渡された変数への参照を、変数a1として定義
declare -n a1=$1
# 変数a2は通常の変数
a2="def"
echo "関数の引数 \$1 = $1"
echo "名前参照変数 a1 = $a1"
echo "通常の変数 a2 = $a2"
echo
echo "条件式 -R"
echo
# 名前参照変数
if [[ -R a1 ]]; then
echo "a1 についての結果はtrue"
else
echo "a1 についての結果はfalse"
fi
# 通常の変数
if [[ -R a2 ]]; then
echo "a2 についての結果はtrue"
else
echo "a2 についての結果はfalse"
fi
# a3は未設定
if [[ -R a3 ]]; then
echo "a3 についての結果はtrue"
else
echo "a3 についての結果はfalse"
fi
}
arg1="abc"
samplefunc1 arg1
実行結果
$ ./sample.sh
関数の引数 $1 = arg1 <--- 引数として渡される値としての変数名
名前参照変数 a1 = abc <--- 名前参照属性を設定した変数a1の値(呼び出し時の引数arg1にセットされた値)
通常の変数 a2 = def <--- 関数内の通常変数
条件式 -R
a1 についての結果はtrue <--- 名前参照のシェル変数であるためtrue
a2 についての結果はfalse <--- 通常のシェル変数はfalse
a3 についての結果はfalse <--- 変数が未設定の場合はfalse
[文字列]の長さが0の場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -z"
if [[ -z "abc" ]]; then
echo "-z \"abc\"についての結果はtrue"
else
echo "-z \"abc\"についての結果はfalse"
fi
if [[ -z "" ]]; then
echo "-z \"\"についての結果はtrue"
else
echo "-z \"\"についての結果はfalse"
fi
実行結果
$ ./sample.sh
条件式 -z
-z "abc"についての結果はfalse <--- 文字列長さが0より大きい場合はfalse
-z ""についての結果はtrue <--- 文字列長さが0の場合はtrue
[文字列]の長さが0ではない場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 -n"
if [[ -n "abc" ]]; then
echo "-n \"abc\"についての結果はtrue"
else
echo "-n \"abc\"についての結果はfalse"
fi
if [[ -n "" ]]; then
echo "-n \"\"についての結果はtrue"
else
echo "-n \"\"についての結果はfalse"
fi
実行結果
$ ./sample.sh
条件式 -n
-n "abc"についての結果はtrue <--- 文字列長さが0より大きい場合はtrue
-n ""についての結果はfalse <--- 文字列長さが0の場合はfalse
[文字列1]と[文字列2]が等しい場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 =="
if [[ $1 == "abc" ]]; then
echo "\$1 == \"abc\"についての結果はtrue"
else
echo "\$1 == \"abc\"についての結果はfalse"
fi
if [[ $1 == "abd" ]]; then
echo "\$1 == \"abd\"についての結果はtrue"
else
echo "\$1 == \"abd\"についての結果はfalse"
fi
if [[ $1 == a* ]]; then
echo "\$1 == a*についての結果はtrue"
else
echo "\$1 == a*についての結果はfalse"
fi
if [[ $1 == b* ]]; then
echo "\$1 == b*についての結果はtrue"
else
echo "\$1 == b*についての結果はfalse"
fi
実行結果
$ ./sample.sh abc
条件式 ==
$1 == "abc"についての結果はtrue <--- 引数が「abc」と等しいためtrue
$1 == "abd"についての結果はfalse <--- 引数が「abd」と等しくないためfalse
$1 == a*についての結果はtrue <--- 引数が「a*」のパターンに適合するためtrue
$1 == b*についての結果はfalse <--- 引数が「b*」のパターンに適合しないためfalse
[文字列1]と[文字列2]が等くない場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 !="
if [[ $1 != "abc" ]]; then
echo "\$1 != \"abc\"についての結果はtrue"
else
echo "\$1 != \"abc\"についての結果はfalse"
fi
if [[ $1 != "abd" ]]; then
echo "\$1 != \"abd\"についての結果はtrue"
else
echo "\$1 != \"abd\"についての結果はfalse"
fi
if [[ $1 != a* ]]; then
echo "\$1 != a*についての結果はtrue"
else
echo "\$1 != a*についての結果はfalse"
fi
if [[ $1 != b* ]]; then
echo "\$1 != b*についての結果はtrue"
else
echo "\$1 != b*についての結果はfalse"
fi
実行結果
$ ./sample.sh abc
条件式 !=
$1 != "abc"についての結果はfalse <--- 引数が「abc」と等しいためfalse
$1 != "abd"についての結果はtrue <--- 引数が「abd」と等しくないためfalse
$1 != a*についての結果はfalse <--- 引数が「a*」のパターンに適合するためfalse
$1 != b*についての結果はtrue <--- 引数が「b*」のパターンに適合しないためtrue
[文字列1]が[文字列2]より辞書順で前になる場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 <"
if [[ $1 < "abb" ]]; then
echo "\$1 < \"abb\"についての結果はtrue"
else
echo "\$1 < \"abb\"についての結果はfalse"
fi
if [[ $1 < "abd" ]]; then
echo "\$1 < \"abd\"についての結果はtrue"
else
echo "\$1 < \"abd\"についての結果はfalse"
fi
実行結果
$ ./sample.sh abc
条件式 <
$1 < "abb"についての結果はfalse <--- 引数が「abb」より辞書順で後となるためfalse
$1 < "abd"についての結果はtrue <--- 引数が「abd」より辞書順で前となるためtrue
[文字列1]が[文字列2]より辞書順で後になる場合はtrue
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式 >"
if [[ $1 > "abb" ]]; then
echo "\$1 > \"abb\"についての結果はtrue"
else
echo "\$1 > \"abb\"についての結果はfalse"
fi
if [[ $1 > "abd" ]]; then
echo "\$1 > \"abd\"についての結果はtrue"
else
echo "\$1 > \"abd\"についての結果はfalse"
fi
実行結果
$ ./sample.sh abc
条件式 >
$1 > "abb"についての結果はtrue <--- 引数が「abb」より辞書順で後となるためtrue
$1 > "abd"についての結果はfalse <--- 引数が「abd」より辞書順で前となるためfalse
-eq -ne -lt -le -gt -ge
サンプルコード
sample.sh
sample.sh
#!/bin/bash
echo "条件式(整数値算術演算) -eq"
echo "等しい場合にtrue"
if [[ $1 -eq 1 ]]; then
echo "\$1 -eq 1 についての結果はtrue"
else
echo "\$1 -eq 1 についての結果はfalse"
fi
if [[ $1 -eq 2 ]]; then
echo "\$1 -eq 2 についての結果はtrue"
else
echo "\$1 -eq 2 についての結果はfalse"
fi
echo
echo "条件式(整数値算術演算) -ne"
echo "等しくない場合にtrue"
if [[ $1 -ne 1 ]]; then
echo "\$1 -ne 1 についての結果はtrue"
else
echo "\$1 -ne 1 についての結果はfalse"
fi
if [[ $1 -ne 2 ]]; then
echo "\$1 -ne 2 についての結果はtrue"
else
echo "\$1 -ne 2 についての結果はfalse"
fi
echo
echo "条件式(整数値算術演算) -lt"
echo "左側の値が小さい場合にtrue"
if [[ $1 -lt 0 ]]; then
echo "\$1 -lt 0 についての結果はtrue"
else
echo "\$1 -lt 0 についての結果はfalse"
fi
if [[ $1 -lt 1 ]]; then
echo "\$1 -lt 1 についての結果はtrue"
else
echo "\$1 -lt 1 についての結果はfalse"
fi
if [[ $1 -lt 2 ]]; then
echo "\$1 -lt 2 についての結果はtrue"
else
echo "\$1 -lt 2 についての結果はfalse"
fi
echo
echo "条件式(整数値算術演算) -le"
echo "左側の値が右側の値以下の場合にtrue"
if [[ $1 -le 0 ]]; then
echo "\$1 -le 0 についての結果はtrue"
else
echo "\$1 -le 0 についての結果はfalse"
fi
if [[ $1 -le 1 ]]; then
echo "\$1 -le 1 についての結果はtrue"
else
echo "\$1 -le 1 についての結果はfalse"
fi
if [[ $1 -le 2 ]]; then
echo "\$1 -le 2 についての結果はtrue"
else
echo "\$1 -le 2 についての結果はfalse"
fi
echo
echo "条件式(整数値算術演算) -gt"
echo "左側の値が大きい場合にtrue"
if [[ $1 -gt 0 ]]; then
echo "\$1 -gt 0 についての結果はtrue"
else
echo "\$1 -gt 0 についての結果はfalse"
fi
if [[ $1 -gt 1 ]]; then
echo "\$1 -gt 1 についての結果はtrue"
else
echo "\$1 -gt 1 についての結果はfalse"
fi
if [[ $1 -gt 2 ]]; then
echo "\$1 -gt 2 についての結果はtrue"
else
echo "\$1 -gt 2 についての結果はfalse"
fi
echo
echo "条件式(整数値算術演算) -ge"
echo "左側の値が右側の値以上の場合にtrue"
if [[ $1 -ge 0 ]]; then
echo "\$1 -ge 0 についての結果はtrue"
else
echo "\$1 -ge 0 についての結果はfalse"
fi
if [[ $1 -ge 1 ]]; then
echo "\$1 -ge 1 についての結果はtrue"
else
echo "\$1 -ge 1 についての結果はfalse"
fi
if [[ $1 -ge 2 ]]; then
echo "\$1 -ge 2 についての結果はtrue"
else
echo "\$1 -ge 2 についての結果はfalse"
fi
echo
実行結果
$ ./sample.sh 1
条件式(整数値算術演算) -eq
等しい場合にtrue
$1 -eq 1 についての結果はtrue <--- 引数が1であり等しいためtrue
$1 -eq 2 についての結果はfalse <--- 引数が1であり等しくないためfalse
条件式(整数値算術演算) -ne
等しくない場合にtrue
$1 -ne 1 についての結果はfalse <--- 引数が1であり等しいためfalse
$1 -ne 2 についての結果はtrue <--- 引数が1であり等しくないためtrue
条件式(整数値算術演算) -lt
左側の値が小さい場合にtrue
$1 -lt 0 についての結果はfalse <--- 引数が1であり右側の値より大きいためfalse
$1 -lt 1 についての結果はfalse <--- 引数が1であり右側の値と等しいためfalse
$1 -lt 2 についての結果はtrue <--- 引数が1であり右側の値より小さいためtrue
条件式(整数値算術演算) -le
左側の値が右側の値以下の場合にtrue
$1 -le 0 についての結果はfalse <--- 引数が1であり右側の値より大きいためfalse
$1 -le 1 についての結果はtrue <--- 引数が1であり右側の値と等しいためtrue
$1 -le 2 についての結果はtrue <--- 引数が1であり右側の値より小さいためtrue
条件式(整数値算術演算) -gt
左側の値が大きい場合にtrue
$1 -gt 0 についての結果はtrue <--- 引数が1であり右側の値より大きいためtrue
$1 -gt 1 についての結果はfalse <--- 引数が1であり右側の値と等しいためfalse
$1 -gt 2 についての結果はfalse <--- 引数が1であり右側の値より小さいためfalse
条件式(整数値算術演算) -ge
左側の値が右側の値以上の場合にtrue
$1 -ge 0 についての結果はtrue <--- 引数が1であり右側の値より大きいためtrue
$1 -ge 1 についての結果はtrue <--- 引数が1であり右側の値と等しいためtrue
$1 -ge 2 についての結果はfalse <--- 引数が1であり右側の値より小さいためfalse
実行環境
GNU bash, version 5.1.16
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。