第二部分shell----二、shell 条件测试
一、基本语法
在shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条件为 真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。
1.test<测试表达式> :test命令和之间至少有一个空格
2.[<测试表达式>]:该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格
3.[[<测试表达式>]]:比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可 以使用通配符等进行模式匹配
4.((<测试表达式>)):一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数
二、文件测试表达式
一、常用的文件测试操作符
想要把测试操作符和echo $?合在一起用,则要加分号,test -f /shell/chao03/file ; echo $?/----意为不管前面的是否成立,继续执行echo $? 或者 && ---- 前面命令执行成功,再打印echo $?
-a /-e: 文件存在为真,不存在则为非0----echo$?
-s:存在且大小不为零才为真
-b:文件是否存在,且为块文件,如果文件存在且是一个块设备文件
-c:文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0
-d :文件存在且为目录则为真
-f :文件存在且为普通文件则为真
-L:文件存在且为链接文件则为真
-u:文件是否设立sudi位,如果设置了sudi,则为0
-r: 文件存在且可读为真
-w :文件存在可写为真
-x : 文件存在可执行为真
二、案例
1.test案例
2.[]示例
是否有读写rw权限,不限制root用户,只限制普通用户;但x可执行权限限制所有用户
3.[[]]示例
如果测试的文件路径是用变量代替,那么变量一定要加引号
练习1:
Read -p "请输入一个文件名:" filepath
Test -z "$filepath" && echo " you must input a filename" && exit 1
Echo $filepath
Read -p "请输入一个文件名:" filepath
Test -z "$filepath" && echo " you must input a filename" && exit 1
! [ -a "$filepath"] && echo "the file do not exit" && exit 2
Echo $filepath
Read -p "请输入一个文件名:" filepath
Test -z "$filepath" && echo " you must input a filename " && exit 1
! [ -a "$filepath" ] && echo " the file do not exit " && exit 2
[ -d "$filepath" ] && echo " this is directory "[ -r ]
[ -L "$filepath" ] && echo " this is symbolic "
[ -f "$filepath" ] && echo "this is regular "
[ -r "$filepath" ] && echo "has read " 或者 perm=r
[ -w "$filepath" ] && echo "has write " 或者 perm={$perm}w
[ -x "$filepath" ] && echo "has execute " 或者 perm={$perm}x
Echo $filepath 或者 echo "$filepath permission is $perm "
三、字符串测试表达式
一、常用字符串测试操作符
-n : 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero
-z :若字符串的长度为0,则为真,z可以理解为zero
“串1”=“串2”若字符串1等于字符串2,则为真,可使用==代替=
“串1”!=“串2”若字符串1不等于字符串2,则为真
二、案例
四、整数测试表达式
一、常用字符串测试操作符
在[]以及test中使用的比较符号 在(())和[[]]中使用的比较符号 说明
-eq ==或= 相等,全拼为equal
-ne != 不相等,全拼为not equal
-gt > 大于,全拼为greater than
-ge >= 大于等于,全拼为greater equal
-lt < 小于,全拼为less than
-le <= 小于等于,全拼为less equal
五、逻辑操作符
一、常用字符串测试操作符
在[]中使用的逻辑操作符 在test、[[]]和(())中使用的逻辑操作符 说明
-a && and,与,两端都为真,则结果为真
-o || or,或,两端有一个为真,则结果为真
! ! not,非,两端相反,则结果为真
六、实验
实验1:通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。
实验2:通过read读入两个整数,并比较他们的大小
Expr 先看输入的内容能不能相加
实验3:假设执行一个可以携带参数的script,执行该脚本后屏幕会显示如下的数据:
程序的文件名;共有几个参数;若参数的个数小于2个则告知用户参数数量太少;全部的参数内容;第一 个参数;第二个参数。