| 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 |
原文:http://blog.csdn.net/xiaocainiaoshangxiao/article/details/39457627