Loose-Info.com
Last Update 2022/12/10
TOP - 各種テスト - bash - 条件式

条件式


テスト項目

(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


(01) -a  ファイル 

[ファイル]が存在する場合はtrue

サンプルコード
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は存在しない

(02) -b  ファイル 

[ファイル]が存在し、ブロック特殊ファイルであればtrue

サンプルコード
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

(03) -c  ファイル 

[ファイル]が存在し、キャラクタ特殊ファイルであればtrue

サンプルコード
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

(04) -d  ファイル 

[ファイル]が存在し、ディレクトリであればtrue

サンプルコード
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

(05) -e  ファイル 

[ファイル]が存在する場合はtrue

サンプルコード
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

(06) -f  ファイル 

[ファイル]が存在し、通常ファイルであればtrue

サンプルコード
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

(07) -g  ファイル 

[ファイル]が存在し、set-group-idであればtrue

サンプルコード
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

(08) -h  ファイル 

[ファイル]が存在し、シンボリックリンクであればtrue

サンプルコード
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

(09) -k  ファイル 

[ファイル]が存在し、「sticky」ビットが設定されていればtrue

サンプルコード
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

(10) -p  ファイル 

[ファイル]が存在し、名前付きパイプ(FIFO)であればtrue

サンプルコード
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

(11) -r  ファイル 

[ファイル]が存在し、読み取り可能であればtrue

サンプルコード
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

(12) -s  ファイル 

[ファイル]が存在し、サイズが0より大きければtrue

サンプルコード
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

(13) -t  ファイルディスクリプタ 

[ファイルディスクリプタ]がオープンで、端末を参照している場合はtrue

サンプルコード
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

(14) -u  ファイル 

[ファイル]が存在し、set-user-idビットが設定されている場合はtrue

サンプルコード
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

(15) -w  ファイル 

[ファイル]が存在し、書き込み可能であればtrue

サンプルコード
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

(16) -x  ファイル 

[ファイル]が存在し、実行可能であればtrue

サンプルコード
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

(17) -G  ファイル 

[ファイル]が存在し、実効グループIDに所有されている場合はtrue

サンプルコード
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

(18) -L  ファイル 

[ファイル]が存在し、シンボリックリンクであればtrue

サンプルコード
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

(19) -O  ファイル 

[ファイル]が存在し、実効ユーザーIDに所有されている場合はtrue

サンプルコード
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

(20) -S  ファイル 

[ファイル]が存在し、ソケットであればtrue

サンプルコード
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

(21)  ファイル1  -ef  ファイル2 

[ファイル1]と[ファイル2]が同じデバイスとinode番号を参照している場合はtrue

サンプルコード
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

(22)  ファイル1  -nt  ファイル2 

[ファイル1]が[ファイル2]よりも新しい場合、または[ファイル1]が存在し、[ファイル2]が存在しない場合はtrue

サンプルコード
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

(23)  ファイル1  -ot  ファイル2 

[ファイル1]が[ファイル2]よりも古い場合、または[ファイル2]が存在し、[ファイル1]が存在しない場合はtrue

サンプルコード
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

(24) -o  シェルオプション 

[シェルオプション]が有効であればtrue

サンプルコード
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

(25) -v  変数名 

[変数名]が設定されている場合はtrue

サンプルコード
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

(26) -R  変数名 

[変数名]が設定され、名前参照である場合はtrue

サンプルコード
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

(27) -z  文字列 

[文字列]の長さが0の場合はtrue

サンプルコード
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

(28) -n  文字列 

[文字列]の長さが0ではない場合はtrue

サンプルコード
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

(29)  文字列1  ==  文字列2 

[文字列1]と[文字列2]が等しい場合はtrue

サンプルコード
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

(30)  文字列1  !=  文字列2 

[文字列1]と[文字列2]が等くない場合はtrue

サンプルコード
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

(31)  文字列1  <  文字列2 

[文字列1]が[文字列2]より辞書順で前になる場合はtrue

サンプルコード
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

(32)  文字列1  >  文字列2 

[文字列1]が[文字列2]より辞書順で後になる場合はtrue

サンプルコード
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

(33) 整数値に関する算術演算子

-eq -ne -lt -le -gt -ge

サンプルコード
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


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。