首页 > 代码库 > Shell布尔运算
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 |
Shell布尔运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。