Loading... <p><strong><span style="color:#0080FF">概述</span></strong></p> <p><span style="font-size: 12px"> 条件判断是学习shell脚本之前要掌握的重点基础。条件判断分为以下几类:文件判断、数值判断、字符判断。而文件判断还可以细分到:文件类型判断、文件权限判断、文件所属判断、文件之间属性判断;</span></p> <p><span style="font-size: 12px"> 举个例子,如果我们要判断/tmp下是否存在facker这个目录或文件,可以结合&&和||命令来获取到结果:</span></p> <p><span style="color:#272727"></span></p> <pre class="brush:bash;toolbar:false;">[facker@facker6 tmp]$ test -e facker && echo "file exit." || echo "file not found." file not found. [facker@facker6 tmp]$ ls fstab functions grub.conf [facker@facker6 tmp]$</pre> <p></p> <p> <span style="font-size: 12px"> 从结果中回显可以看到,在我的/tmp目录下的确是不存在facker的目录或文件。可以看出,-e这个东东是测试文件的存在与否的,那还有没有其它EXPRESSION呢,答案是有的。</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">test语法如下:</span></p> <pre class="brush:bash;toolbar:false">[facker@facker6 tmp]$ test EXPRESSION FILENAME #上面说的-e就是这里的EXPRESSION啦!</pre> <p style="text-indent: 2em"><span style="font-size: 12px">还有另外的一种语法格式:</span></p> <pre class="brush:bash;toolbar:false">[facker@facker6 tmp]$ [ EXPRESSION FILENAME ]</pre> <p style="text-indent: 2em"><span style="font-size: 12px"></span></p> <p><span style="font-size: 12px"><br /></span></p> <p><strong><span style="color:#0080FF">文件判断</span></strong></p> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">1、文件类型判断</span></strong><strong><span style="font-size: 12px"></span></strong></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span></td> <td align="center" valign="top" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-e</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> –<strong>b</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px"><span style="font-size: 12px">判断文件是否存在,并且是否为普通文件</span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-d</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在,并且是否为目录</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-b</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为块设备文件(block file)</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-c</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为字符设备文件</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><strong><span style="font-size: 12px"> -L</span></strong></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为符号连接文件</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong> -p</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为管道文件</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong> -s</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为空文件</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong> -S</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且是否为套接字文件</span></td> </tr> </tbody> </table> <p></p> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">2、按照文件权限来判断</span></strong></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="top" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-r</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在,且对当前操作用户是否拥有读权限</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-w</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px"><span style="font-size: 12px">判断文件是否存在,<span style="font-size: 12px">且对当前操作用户是否拥有写权限</span></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-x</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在,<span style="font-size: 12px">且对当前操作用户是否拥有执行权限</span></span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-u</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且SUID是否置位</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle"><strong><span style="font-size: 12px"> -g</span></strong></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且SGID是否置位</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong> -k</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,并且SBit是否置位</span></td> </tr> </tbody> </table> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">3、按照文件被操作后的判断</span></strong></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="middle" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-t fd</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在,且文件的描述符是否已经打开并且与某终端相关</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-N</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px"><span style="font-size: 12px">判断文件是否存在,<span style="font-size: 12px">且文件最后一次被读取时内容是否修改</span></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"> <strong>-O</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件是否存在,<span style="font-size: 12px">且当前操作用户是否为文件的属主</span></span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"> <strong>-G</strong></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px">判断文件是否存在,且文件与当前操作用户是否为同一个属组</span></td> </tr> </tbody> </table> <p></p> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">4、两个文件之间进行比较(双目比较)</span></strong></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="middle" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>文件1 -nt 文件2</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件1的修改时间是否比文件2的新(多用于配置文件备份)</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"><span style="font-size: 12px"><strong>文件1 -ot 文件2</strong></span></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px">判断文件1的修改时间是否比文件2的旧</span><span style="font-size: 12px"></span></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>文件1 -ef 文件2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断文件1和文件2的inode号是否一致(判断是否为硬链接)<span style="font-size: 12px"></span></span></td> </tr> </tbody> </table> <p style="text-indent: 0em"><span style="font-size: 16px;color:#0080FF"><strong>数值判断</strong></span><strong><span style="font-size: 12px"><br /></span></strong></p> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">5、两个整数之间进行比较(双目比较)</span></strong></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="middle" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>整数1 -eq 整数2</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断整数1和整数2是否相等</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle"><span style="font-size: 12px"><span style="font-size: 12px"><strong>整数1 -ne 整数2</strong></span></span></td> <td rowspan="1" colspan="1" valign="top"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px">判断整数1和整数2是否不等</span><span style="font-size: 12px"></span></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>整数1 -gt 整数2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断整数1是否大于整数2<span style="font-size: 12px"></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>整数1 -lt 整数2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断整数1是否小于整数2<span style="font-size: 12px"></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>整数1 -ge 整数2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断整数1是否大于等于整数2<span style="font-size: 12px"></span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>整数1 -le 整数2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断整数1是否小于等于整数2<span style="font-size: 12px"></span></span></td> </tr> </tbody> </table> <p style="text-indent: 0em"><span style="font-size: 16px;color:#0080FF"><strong>字符串判断</strong></span><strong><span style="font-size: 12px"><br /></span></strong></p> <p style="text-indent: 2em"><strong><span style="font-size: 12px;color:#FF2D2D">6、两个字符串之间进行比较</span></strong></p> <p><span style="font-size: 12px"><span style="font-size: 12px"></span></span></p> <p><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"></span></span></span></span><span style="font-size: 12px"></span></p> <p><span style="font-size: 12px"></span></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="middle" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>-z 字符串</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串是否为空</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>-n 字符串</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串是否为非空</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>字符串</strong><strong>1 == 字符串2</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串1是否和字符串2相等</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><strong>字符串</strong><strong>1 != 字符串2</strong></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px"><span style="font-size: 12px">判断字符串1是否和字符串2不相等</span></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>字符串</strong><strong>1 > 字符串2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串1是否大于字符串2</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>字符串</strong><strong>1 < 字符串2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串1是否小于字符串2</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><strong>字符串</strong><strong>1 ~= 字符串2</strong></span></span></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">判断字符串1能否被右侧的PATTERN所匹配,该表达式写为 [[ 字符串1 ~= 字符串2 ]]</span></td> </tr> </tbody> </table> <p style="text-indent: 0em"><span style="font-size: 16px;color:#0080FF"><strong>多重条件判断</strong></span><strong><span style="font-size: 12px"><br /></span></strong></p> <p><span style="font-size: 12px"><span style="font-size: 12px"></span></span></p> <p><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"><span style="font-size: 12px"></span></span></span></span><span style="font-size: 12px"></span></p> <p><span style="font-size: 12px"></span></p> <table align="center" width="920"> <tbody> <tr class="firstRow"> <td align="center" valign="middle" width="326"><span style="font-size: 12px;color:#FF2D2D">EXPRESSION</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> <td align="center" valign="middle" width="325"><span style="font-size: 12px;color:#FF2D2D">作用</span><span style="font-family: arial,helvetica,sans-serif"><br /></span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>判断1 -a 判断2</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">逻辑与,判断1和判断2都成立,结果为真</span></td> </tr> <tr class="ue-table-interlace-color-single"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>判断1 -o 判断2</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">逻辑或,判断1和判断2有一个成立,结果为真</span></td> </tr> <tr class="ue-table-interlace-color-double"> <td rowspan="1" colspan="1" align="center" valign="middle" width="326"><span style="font-size: 12px"><strong>! 判断</strong><br /></span></td> <td rowspan="1" colspan="1" valign="top" width="325"><span style="font-size: 12px">逻辑非,使原始的判断式取反</span></td> </tr> </tbody> </table> <p></p> <p style="text-indent: 0em"><span style="font-size: 16px;color:#0080FF"><strong>练习</strong></span><strong><span style="font-size: 12px"><br /></span></strong></p> <p style="text-indent: 2em"><span style="font-size: 12px">好了,干货分享完了,我们来几道练习来验证一下是不是真的可行吧。</span></p> <p style="text-indent: 2em"><span style="font-size: 12px">习题1:测试文件test.conf是否要比test.conf.bak新,如果是,则更新test.conf.bak。</span></p> <pre class="brush:bash;toolbar:false">[facker@facker6 tmp]$ touch test.conf test.conf.bak #通过touch命令创建两个空白文件 [facker@facker6 tmp]$ echo 123 > test.conf #向test.conf文件写入123 [facker@facker6 tmp]$ cat test.conf test.conf.bak 123 [facker@facker6 tmp]$ [ test.conf -nt test.conf.bak ] && cp -f test.conf test.conf.bak || echo "File not change." [facker@facker6 tmp]$ cat test.conf test.conf.bak #如果两个文件一致,则会输出两行123 123 123</pre> <p style="text-indent: 2em"><span style="font-size: 12px">习题2:测试当前用户是否对/etc/shadow文件是否拥有读写权限。</span></p> <pre class="brush:bash;toolbar:false">[facker@facker6 tmp]$ whoami facker [facker@facker6 tmp]$ ls -ld /etc/shadow ---------- 1 root root 848 Dec 20 19:06 /etc/shadow #shadow文件对于当前用户来说是既不可读也不可写的 [facker@facker6 tmp]$ [ -r /etc/shadow -o -w /etc/shadow ] && echo "i can read or write this file." || echo "i do not have permission." i do not have permission. [facker@facker6 tmp]$</pre> <p> </p> <p style="text-indent: 0em"><span style="font-size: 16px;color:#0080FF"><strong>参考资料</strong></span><strong><span style="font-size: 12px"><br /></span></strong></p> <ul class=" list-paddingleft-2"> <li> <p style="text-indent: 2em"><span style="font-size: 12px">《马哥Linux教学》</span></p> </li> <li> <p style="text-indent: 2em"><span style="font-size: 12px">《鸟哥私房菜基础篇》<br /></span></p> </li> </ul> <p style="text-indent: 2em"><span style="font-size: 12px"></span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信