当前位置:K88软件开发文章中心网站服务器框架Shell → 文章内容

Shell 布尔运算

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:39:34

是需要注意,[之后与] 之前需要加上额外的空格在测试字符串时,所有变量建议用双引号包含起来,以防止变量内容为空时出现仅有测试参数,没有测试内容的情况下面我们用实例来演示上面三个注意事项:-ne 和 -eq 对应的,我们有时候可以免去 ! 运算$ i=5$ if test $i -eq 5; then echo "YES"; else echo "NO"; fiYES$ if test $i -ne 5; then echo "YES"; else echo "NO"; fiNO$ if test ! $i -eq 5; then echo "YES"; else echo "NO"; fiNO用 [ ] 可以取代 test,这样看上去会“美观”很多$ if [ $i -eq 5 ]; then echo "YES"; else echo "NO"; fiYES$ if [ $i -gt 4 ] && [ $i -lt 6 ]; then echo "YES"; else echo "NO"; fiYES记得给一些字符串变量加上 "",记得 [ 之后与 ] 之前多加一个空格$ str=""$ if [ "$str" = "test"]; then echo "YES"; else echo "NO"; fi-bash: [: missing `]'NO$ if [ $str = "test" ]; then echo "YES"; else echo "NO"; fi-bash: [: =: unary operator expectedNO$ if [ "$str" = "test" ]; then echo "YES"; else echo "NO"; fiNO到这里,条件测试就介绍完了,下面介绍命令列表,实际上在上面我们已经使用过了,即多个test命令的组合,通过 &&,|| 和 ! 组合起来的命令序列。这种命令序列可以有效替换 if/then 的条件分支结构。这不难想到我们在 C 语言程序设计中经常做的如下的选择题(很无聊的例子,但是有意义):下面是否会打印 j,如果打印,将打印什么?#include <stdio.h>int main(){ int i, j; i=5;j=1; if ((i==5) && (j=5)) printf("%d\n", j); return 0;}很容易知道将打印数字 5,因为 i==5 这个条件成立,而且随后是 &&,要判断整个条件是否成立,我们得进行后面的判断,可是这个判断并非常规的判断,而是先把 j 修改为 5,再转换为真值,所以条件为真,打印出 5 。因此,这句可以解释为:如果 i 等于 5,那么把 j 赋值为 5,如果 j 大于 1 (因为之前已经为真),那么打印出 j 的值。这样用 && 连结起来的判断语句替代了两个 if 条件分支语句。正是基于逻辑运算特有的性质,我们可以通过 &&,|| 来取代 if/then 等条件分支结构,这样就产生了命令列表。命令列表命令列表的执行规律命令列表的执行规律符合逻辑运算的运算规律,用 && 连接起来的命令,如果前者成功返回,将执行后面的命令,反之不然;用 || 连接起来的命令,如果前者成功返回,将不执行后续命令,反之不然。范例:如果 ping 通 www.lzu.edu.cn,那么打印连通信息$ ping -c 1 www.lzu.edu.cn -W 1 && echo "=======connected======="非常有趣的问题出来了,即我们上面已经提到的:为什么要让 C 程序在 main() 函数的最后返回 0 ?如果不这样,把这种程序放入命令列表会有什么样的结果?你自己写个简单的 C 程序,然后放入命令列表看看。命令列表的作用有时用命令列表取代 if/then 等条件分支结构可以省掉一些代码,而且使得程序比较美观、易读,例如:范例:在脚本里判断程序的参数个数,和参数类型#!/bin/bashecho $#echo $1if [ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null);then echo "YES"fi说明:上例要求参数个数为 1 并且类型为数字。再加上 exit 1,我们将省掉 if/then 结构#!/bin/bashecho $#echo $1! ([ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null)) && exit 1echo "YES"这样处理后,对程序参数的判断仅仅需要简单的一行代码,而且变得更美观。小结这一节介绍了 Shell 编程中的逻辑运算,条件测试和命令列表。

上一页  [1] [2] 


Shell 布尔运算