您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > shell 脚本(if test语句)
————————————————————————————————test命令语法:testexpression或者[expression]test命令对表达式进行评估,并且设置返回值。表达式的值返回值true0false非零(通常为1)test命令能够评估的对象有:整数字符串文件test命令被用来评估表达式并且产生返回值。它用参数组成逻辑表达式并且对表达式进行评估。test命令不会产生标准输出,你必须必须通过返回值来判断test命令的结果。如果表达式为真,返回值会为0,如果表达式为假,返回值为1。test命令可以被单独使用,然后你能够看到返回值,但它用的最多的还是在if和while结构中,用来提供条件流程控制。test命令的也可以用[expression]来代替。这对提高可读性有帮助,特别是在处理数字或者字符串的时候。注意:在[和]符号的周围必须要有空格。test命令之数字test语法:[numberrelationnumber]通过关系运算符来对数字进行比较关系运算符:-lt小于-le小于或者等于-gt大于-ge大于或者等于-eq等于-ne不等于例子(假设X=3):$[$X-lt7]$[$X-gt7]$echo$?$echo$?01test命令能被用于比较两个整数之间的数字关系。通常用[.....]语法来调用。test命令的返回值就能说明这个条件为真还是为假。当testing一个变量的值的时候,你应该防止变量不要为空值,例如:$[$XX-eq3]sh:test:argumentexpected如果变量XX在前面没有被赋值,XX的值会是NULL。当shell执行变量替代的时候,shell会试图执行如下语句:[-eg3]而这个语句不是一个完整的test语句,并且会导致一个语法错误。解决这个问题的一个简单的方法就是在被测试的变量的周围加上引号。[$XX-eq3]当shell执行变量替代的时候,shell会试图执行如下语句:[-eq3]这会确保至少有一个NULL值作为一个参数提供给这个test命令使用。注意:作为一个通用的规则,你应该在所有的$变量加上双引号来避免shell进行不正确的变量的替代。test命令之字符串test语法:[string1=string2]判断字符串是否相等[string1!=string2]判断字符串是否不等例子;$X=abc$X=abc$[$X=abc]$[$X!=abc]$echo$?$echo$?01test命令也能够用来计较两个字符串是否相等。[...]语法通常用作字符串的比较。你已经看到在[]周围必须要有空格,同时在操作符周围也必须要有空格存在。字符串操作包括:string1=string2如果string1等于string2就为真string1!=string2如果string1不等于string2就为真-zstring如果string的长度为0就为真-nstring如果string的长度为非零就为真string如果string的长度为非零就为真如果变量中包含空白字符,在这里引号同样也能够保护字符串的test,,例如:$X=yeswewill$[$X=yes]会导致一个语法错误shell会解释这个语法为[yeswewill=yes]$[$x=yes]正确的语法shell会解释这个语法为:[yeswewill=yes]在执行数字比较的时候,shell会将所有的参数当成是数字;在执行字符串比较的时候,shell会把所有的参数当成是字符串。如下例所示:$X=03$Y=3$[$X-eq$Y]比较数字03和数字3$echo$?0为真-它们是相等的数字$[$X=$Y]比较字符串“03”和字符串“3”$echo$?1为假-它们是不相同的字符串test命令-文件比较语法:test-optionfilename通过选项对文件进行test例子:$test-ffunfile$echo$?0$test-dfunfile$echo$?1shell提供的一个有用的test特性是可以用它来test文件的特征,例如文件类型和许可权限。例如:$test-ffilename如果文件存在并且是一个普通文件(不是目录或者设备文件),会返回真(0)。test-sfilename如果文件存在并且其字节数大于0,会返回真(0)。其它还有许多有用的文件test方式,比如:-rfile如果文件存在并且是可读的时候为真-wfile如果文件存在并且是可写的时候为真-xfile如果文件存在并且是可执行的时候为真-ddirectory目录存在并且是个目录的时候为真test命令-其他操作符语法:-oOR-aAND\(\)GROUPING例子:$[$ANS=y-oANS'=Y]$[$NUM-gt10-a$NUM-lt20]$test-sfile-a-rfile注意:()前面必须要用斜杠。使用Boolean操作符可以同时测试多个条件。例子:$[$ANS=y-o$ANS=Y]$[$NUM-gt10-a$NUM-lt20]$test-sfile-a-rfile-a-xfileNOT操作符(!)被用作连接其他的操作符,特别是在文件test的时候用的很普遍。在!操作符和其他的操作符之间必须要有空格,例如:test!-dfile能够用来代替test-ffile-o-cfile-o-bfile....括号被用来对操作符进行分组,但是在shell中括号还有一个特殊的意义就是优先运算的意义。因此,括号前面必须使用\符号来忽略其原有含义。以下的命令验证:有两个命令行参数,并且第一个命令行参数是一个-m,并且最后一个命令行参数是一个目录或者是一个字节数大于0的文件:[\($#=2\)-a\($1=-m\)-a\(-d$2-o-s$2\)]
本文标题:shell 脚本(if test语句)
链接地址:https://www.777doc.com/doc-3820786 .html