Linux Shell核心编程指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 智能化脚本的基础之测试

在Shell中可以使用多种方式进行条件判断,如[[表达式]]、[表达式]或者test表达式。使用条件表达式可以测试文件属性,进行字符或数字的比较。需要注意的是,不管使用哪种方式进行条件判断,系统默认都不会有任何输出结果,可以通过echo $?命令,查看上一条命令的退出状态码,或者使用&&和||操作符结合其他命令进行结果的输出操作。

警告

表达式两边必须有空格,否则程序会出错。使用[[]]和test进行排序比较时,使用的比较符号不同。在test或[]中不能直接使用<或>符号进行排序比较。

如果需要在一行代码中输入多条命令,在Shell中可以使用;(分号)、&&(与)、||(或)这三个符号将多个命令分隔。其中;(分号)是按顺序执行命令,分号前后的命令可以没有任何逻辑关系。例如,输入“A命令;B命令”,系统会先执行A命令,不管A命令执行结果如何,都会执行B命令。整个命令的退出码以最后一条命令为准,B命令如果执行成功则退出码为0, B命令如果执行失败则退出码为非0。而使用&&(与)符号分隔多条命令时,仅当前一条命令执行成功后,才会执行&&后面的命令。例如,输入“A命令&&B命令”,系统会先执行A命令,如果A命令执行成功则执行B命令,如果A命令执行失败则不执行B命令。而整行命令的退出码取决于两条命令是否同时执行成功,如果A命令执行成功并且B命令执行也成功,则整行命令的退出码为0,而A命令或B命令中的任何一条命令执行失败,则整行命令的退出码为非0。如果使用||(或)符号分隔多条命令,仅当前一条命令不执行或执行失败后才执行后一条命令。例如,输入“A命令||B命令”,因为A命令是命令行的第一条命令,所以一定会执行,如果A命令执行成功了就不再执行B命令,如果A命令执行失败,则执行B命令,A命令和B命令为二选一的关系。A命令或B命令中有任何一条命令的退出码为0,则整行命令的退出码就是0,否则返回非0。