编程
推荐内容

linuxshell中if的各种判断

作者/整理:admin 来源: 2020-05-08

      ""是一条下令,与test等价,大大部分shell都撑持。

      要紧进展算术演算(上的两个都不兴),也比切合进展平头比,得以径直使用熟识的<,>等比演算符。

      -s文书名如其文书在且最少有一个字符则为真。

      一个目次为了它的情节被拜访决然是可履行的。

      -rFILE如其FILE在且是可读的则为真。

      留意:使用和的时节不要悭吝空格,每一项两边都要有空格,1==2的后果为假,但是1==2的后果为真!两者也是一样的(或说根本上是一样的,双括号比let稍弱一些)。

      -cFILE如其FILE在且是一个字特殊文书则为真。

      论理结合得以不使用test的-a,-o而使用&&||。

      例如在...中得以用引号括起操作符,因在做下令行扩充时会去掉这些引号,而在...则不容许这么做。

      shell编程中应用到得if文句内断定参数–b当file在而且是块文书时归来真-c当file在而且是字符文书时归来真-d当pathname在而且是一个目次时归来真-e当pathname指定的文书或目次在时归来真-f当file在而且是正式文书时归来真-g当由pathname指定的文书或目次在而且设立了SGID位时归来为真-h当file在而且是记号链接文书时归来真,该选项在一部分老系上无用-k当由pathname指定的文书或目次在而且设立了粘滞位时归来真-p当file在而且是下令管道时归来为真-r当由pathname指定的文书或目次在而且可读时归来为真-s当file在文书老幼大于0时归来真-u当由pathname指定的文书或目次在而且设立了SUID位时归来真-w当由pathname指定的文书或目次在而且可履行时归来真。

      譬如2\<10、2<10都是不要使用。

      -tFD如其文书描述符FD开且指向一个终端则为真。

      撑持字符串的模式配合(使用=~操作符时乃至撑持shell的正则抒发式)。

      FILE1-ntFILE2如其FILE1hasbeenchangedmorerecentlythanFILE2,or如其FILE1existsandFILE2doesnot则为真。

      -pFILE如其FILE在且是一个名管道(F如其O)则为真。

      -o当由pathname指定的文书或目次在而且被卧眼下过程的功勋用户ID所指定的用户有时归来真。

      ),而不止仅是一个字符串,例如hello==hell?,后果为真。

      黑linux——shell中.和./履行的区分linux中在shell中使用"."和"./"履行的区分眼前留意到的区分要紧取决条件变量的功能域上:1\.如其使用"./"履行,可WinExecandShellExecute的用法在MFC裡要開啟大面儿程式有三個API得以用,Shellexecute被運用的機率比較高,要紧是它得以统制的參數也比較多。

      "",是关头字,多shell(如ashbsh)并不撑持这种方式。

      -r文书名如其文书在且可读则为真。

      三、字符串断定-zSTRING如其STRING的长度为零则为真,即断定是不是为空,空即是真;-nSTRING如其STRING的长度非零则为真,即断定是不是为非空,非空即是真;STRING1=STRING2如其两个字符串一样则为真;STRING1!=STRING2如其字符串不一样则为真;STRING1如其字符串不为空则为真,与-n类似四、数值断定INT1-eqINT2INT1和INT2两数相当为真,=INT1-neINT2INT1和INT2两数不等为真,<>INT1-gtINT2INT1大于INT1为真,>INT1-geINT2INT1大于对等INT2为真,>=INT1-ltINT2INT1小于INT2为真,<

      INT1-leINT2INT1小于对等INT2为真,<=五、繁杂论理断定-a与-o或!非exp1:如其a>b且aif((a>b))&&((a$b&&$a<$c或if$a-gt$b-a$a-lt$cexp2:如其a>b或aif((a>b))||((a$b||$a<$c或if$a-gt$b-o$a-lt$c"||"和"&&"在SHELL里得以用,也即头个写成ifa>b&&a六、举例6.1if采用read传参断定exp2:查阅分!/bin/bashecho-n"pleaseinputyourscore:"readscoreecho"inputscoreis$score"read-p"pleaseinputascore:"scoreecho-e"yourscore$scoreisjudgingbysysnow"if"$score"-ge"0"&&"$score"-lt"60";thenecho"sorry,youarelost!"elif"$score"-ge"60"&&"$score"-lt"85";thenecho"justsoso!"elif"$score"-le"100"&&"$score"-ge"85";thenecho"goodjob!"elseecho"inputscoreiswrong,therangeis0-100!"fi上是if条件的使用,\------------------------下是shellif和区分||&&两者是一样的,在下令行里testexpr和expr的效果一样。

      5....进展算术扩充,而...不做6....&&...&&...和...-a...-a...不一样,是论理短路操作,而决不会进展论理短路1)在ksh中的test数目字的演算可使用let、(),内中演算时不需求变量$记号,演算符为+、-、、/、%,不提议使用expr数目字的比使用(),其演算符>、>=、<、<=、==、!=得以使用算术扩充,如:((99+1<=101))字符抒发式的比使用,其演算符=、!=、-n、-z文书抒发式的测试使用,其演算符-r、-l、-w、-x、-f、-d、-s、-nt、-ot论理抒发式的测试使用,其演算符!、&&、||数目字比、字符比、论理测试得以结合,如$"a"!="b"&&4-gt3撑持bash中的通配符扩充,如:hest=h??t、hest=ht使用()时,不需求空格分隔各值和演算符,使用时需求用空格分隔各值和演算符。