Shell布尔运算

1. bash里的true和false并不是我们通常所认为的0和1。
true和false是shell的内置命令,返回逻辑值。例如:
$ true
$ echo $?
0
$ false
$ echo $?
1
$?是一个特殊的变量,存放有上一个程序的结束状态
在shell里面,把0作为程序是否成功结束的标志。
 
2. 在shell中,逻辑值表示程序的返回值,如果程序成功返回,
则为真,如果不成功返回,则为假。
 
3. test命令可以用来进行数值测试,字符串测试,文件测试。
* 数值测试:
$ if test 5 -eq 5 ; then echo "YES" ; else echo "NO"; fi
YES
$ if test 5 -ne 5 ; then echo "YES" ; else echo "NO"; fi
NO
* 字符串测试
$ if test -n "not empty" ; then echo "YES" ; else echo "NO"; fi
YES
-n 测试字符串的长度不为零
$ if test -z "not empty" ; then echo "YES" ; else echo "NO"; fi
NO
-z 测试字符串的长度为零
$ if test -z "" ; then echo "YES" ; else echo "NO"; fi
YES
* 文件测试
$ if test -f /boot/System.map ; then echo "YES" ; else echo "NO"; fi
YES
-f 用来测试文件是否存在,以及是否是一个普通的文件
$ if test -d /boot/System.map ; then echo "YES" ; else echo "NO"; fi
-d 用来测试文件是否存在,以及是否是一个目录
 
4. test逻辑组合测试
* 与,例如:
$ a=5; b=4; c=6;
$ if test $a -eq 5 -a $b -eq 4 -a $c -eq 6 ; then echo "YES" ; else echo "NO" ; fi
YES
* 或,例如:
$ if test $a -eq 5 -o $b -ne 4 ; then echo "YES" ; else echo "NO" ; fi
YES
* 非,例如:
$ if test ! -f /etc/profile ; then echo "YES" ; else echo "NO" ; fi
NO
 
5. test与&&,||
$ str1="test"; str2="test"
$ if test -z "$str1" -o "$str2" == "$str1" ; then echo "YES" ; else echo "NO" ; fi
YES
$ if test -z "$str1" || test "$str1"=="$str2" ; then echo "YES" ; else echo "NO" ; fi
YES
两个测试语句是等价的。但是可以看到-o使用在test内部,而||使用在test之间
test可以使用[]来代替,需要注意的是[]的前后都需要空格
在测试字符串时,建议所有的变量都用双引号括起来,以防止变量代表的字符串为空的情况
在使用中括号测试时,要注意:
$ i=5
$ if [ $i=6 ] ; then echo "YES" ; else echo "NO"; fi
YES
$ if [ $i = 6 ] ; then echo "YES" ; else echo "NO"; fi
NO
 
6. 命令列表
* 对于&&,如果前面的命令成功执行,则继续执行后面的命令;如果失败,就不执行后面的命令
* 对于||,若果前面的命令没有成功执行,则继续执行后面的命令
例如:
ping -c1 www.lzu.edu.cn && echo "connected"

* 命令列表有时用来取代if/then等分支结构,这样可以省略一些代码

参考资料

====================

Shell编程范例 -- by falcon

时间: 2024-08-05 23:58:27

Shell布尔运算的相关文章

linux shell 脚本学习总结

shell 编程: shell 开头必须指定bash:#!/bin/bash shell 的执行方式: 1.  ./1.sh    执行当前目录下的1.sh,1.sh要是可执行文件 2.  bash  /usr/local/1.sh 定义变量   aa=’qqq’        =两侧不能有空格,使用变量 ${aa} Shell特殊含义变量 $$ 取当前脚本的进程id,就是pid $0  取当前文件名 $n  n是大于0的数字,n是几就是第几个参数 $#  取参数的个数 $* 取所有参数 $?

Linux Shell编程之二选择结构

Shell编程学习之二 一.bash的条件测试 测试方法或者说测试书写: test EXPR [ EXPR ] [[ EXPR ]] 例如:测试变量 User_Name 的之是否为root test $User_Name="root" [ $User_Name == "root" ] [[ $User_Name == "root" ] 根据比较时操作数的类型,测试类型分为: 测试类型 运算符 运算符所代表的意义 示例 整形测试 -gt -lt -

bash shell中测试命令

bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径.如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 .这样if-than语句就与其他编程语言中的if-than语句类似的方式工作了.如果条件不成立,test命令就会退出并返回非零的退出状态码,使得if-than语句不会被执行. 1    test 命令的基本格式     test        condition         condition是test命令要测试的一系列参数和值.

Shell脚本重新学习

#!/bin/bash shell的两种运行方式 改变权限chmod u+x 运行时指定解释器 shell变量 变量类型 访问变量 $.${} 只读变量 readonly 删除变量 unset取消变量,但不能取消只读变量 myUrl="http://lingdandan.blog.51cto.com" unset myUrl echo $myUrl 运行结果: myUrl=" readonly myUrl  unset myUrl echo $myUrl 运行结果: shel

第四章 shell学习之sed命令和awk编程

sed命令 sed只是对缓冲区中原始文件的副本进行编辑,不改变源文件,所以要保存则要重定向到另一个文件 sed三种方式: 1.sed [选项] 'sed命令' 输入文件 2.sed [选项] -f sed脚本文件 输入文件 3../sed脚本文件 输入文件 其中3的sed脚本文件要以#! bin/sed -f等开头 选项: -n 不打印所有行到标准输出,默认先打印匹配的再打印所有 -e 关联多个sed命令 -f 调用sed脚本文件 定位文本: x x为指定行号 x,y 从x到y行 /patter

[shell]shell运算

算术运算 首先这里所说的算术运算是指加法(+), 减法(-),乘法(*),整除(/), 求余(%)四种运算,可以通过添加括号改变优先级,并且只能对整数进行运算(Linux Bash Shell默认不支持浮点数运算) #!/bin/bash val=`expr 2 + 2` #expr 参数要为整数 echo "Total value : $val" a=10 b=-5 c=`expr $a + $b` #+前后空一格,否则输a+b=10+20 echo "a+b=$c&quo

Shell编程——bash基础知识

创建脚本:vim test.sh    脚本内容:#! /bin/bash  #"#!"是一个约定标记,告诉系统用哪种shell来执行              echo "Hello world!"使脚本具有执行权限:chmod  +x ./test.sh执行脚本:./test.sh     #注意,一定要写成./test.sh,而不是test.sh.若直接写成test.sh,linux会去PATH里面找寻有没有test.sh. [shell注释]:以“#”开头的

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

linux Shell函数

Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 1 2 3 4 function 函数名() {     语句     [return] } 关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后可以跟一个括号,符号"{"表示函数执行命令的入口,该符号也可以在函数名那一行,"}"表示函数体的结