编程
推荐内容

「shellif」Shellif条件判断

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

      -NFILE如其FILE在andhasbeenmod如其iedsinceitwaslastread则为真。

      -n字串字串长度不伪则为真。

      -lt小于则为真。

      在和之间的一切字符都决不会被文书扩充或是标志瓜分,只是会有参数引证和下令轮换。

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

      -d文书名如其文书在且为目次则为真。

      4....为shell下令,所以在内中的抒发式应是它的下令行参数,所以串比操作符">"与"<"务须转义,要不就成为IO改向操作符了(请参照上2中的案例)。

      虽然普通情形下得以职业,但是这是欠安好的.惯于使用""来测试字符串是一样好惯.篇出典:除非恒心和决意才力使人真正具有价!相干阅常用adb和adbshell下令一、ADB下令(计算机上操作的下令)ADB常用下令:1.查阅装置:查阅眼下连的装置,adbdevices2\.装置软件:中拇指定的apk文书装置到设PHPWebShell源码下载(1)何是WebShell?WebShell即以asp、php、jsp或cgi等网页文书式在的一样下令履行条件,也得以将其称做为一样网页方便之门。

      -LFILE如其FILE在且是一个记号连则为真。

      如其右首的字符串加了双引号,则以为是一个公文字符串。

      UNIXShell里比字符写法:-eq对等-ne不对等-gt大于-lt小于-le小于对等-ge大于对等-z空串=两个字符相当!=两个字符不等-n非空串更为详尽的介绍:演算符描述示范文书比演算符-efilename如其filename在,则为真-e/var/log/syslog-dfilename如其filename为目次,则为真-d/tmp/mydir-ffilename如其filename为常轨文书,则为真-f/usr/bin/grep-Lfilename如其filename为记号链接,则为真-L/usr/bin/grep-rfilename如其filename可读,则为真-r/var/log/syslog-wfilename如其filename可写,则为真-w/var/mytmp.txt-xfilename如其filename可履行,则为真-L/usr/bin/grepfilename1-ntfilename2如其filename1比filename2新,则为真/tmp/install/etc/services-nt/etc/servicesfilename1-otfilename2如其filename1比filename2旧,则为真/boot/bzImage-otarch/i386/boot/bzImage字符串比演算符(请留意引号的应用,这是防备空格骚扰代码的好法子)-zstring如其string长度为零,则为真-z$myvar-nstring如其string长度非零,则为真-n$myvarstring1=string2如其string1与string2一样,则为真$myvar=onetwothreestring1!=string2如其string1与string2不一样,则为真$myvar!=onetwothree算术比演算符num1-eqnum2对等3-eq$mynumnum1-nenum2不对等3-ne$mynumnum1-ltnum2小于3-lt$mynumnum1-lenum2小于或对等3-le$mynumnum1-gtnum2大于3-gt$mynumnum1-genum2大于或对等3-ge$mynum本子示范:!/bin/bashThisscriptprintsamessageaboutyourweightifyougiveityourweightinkilosandhightincentimeters.if!$==2;thenecho"Usage:,二个参数代替$2,以该类比,参数数的总额在$中,上的案例显得了怎样变更本子,如其参数少于或富余2个来盖章出一条新闻。

      test中可用的比演算符除非==和!=,两者都是用来字符串比的,不得用来平头比,平头比不得不使用-eq,-gt这种式。

      撑持支店隔开的多个抒发式1\.率先,只管很相像,只是从概念上讲,二者是不一样层系的家伙。

      -sFILE如其FILE在且老幼不为0则为真。

      例如说,&&,||,<和>操作符能在一个测试里经过,但是在构造会产生错。

      -eFILE如其FILE在则为真。

      FILE1-otFILE2如其FILE1比FILE2要老,或FILE2在且FILE1不在则为真。

      故此譬如$"a"!=b&&4>3这类结合(见上)也不得以在bash中使用,其疏失率很高。

      -OFILE如其FILE在且属功勋用户ID则为真。

      3.()构造扩充并计算一个算术抒发式的值。

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

      bash-xtijian.sh60170+weight=60+height=170+idealweight=60+\60-le60\+echoYoushouldeatabitmorefat.Youshouldeatabitmorefat.内中-x用来检讨本子的履行市况if文句格式if环境thenCommandelseCommandfi别忘了这结尾if文句忘了结尾fitest.sh:line14:syntaxerror:unexpectedendoffiif的三种环境抒发式ifcommandthenif因变量then下令履行胜利,对等归来0(例如grep,找到配合)履行挫折,归来非0(grep,没找到配合)ifexpression_r_r_rthen抒发式后果为真,则归来0,if把0值引向theniftestexpression_r_r_rthen抒发式后果为假,则归来非0,if把非0值引向then&&——快捷if-f"/etc/shadow"&&echo"Thiscomputerusesshadowpasswors"&&得以了解为then如其左首的抒发式为真则履行右首的文句shell的if与c言语if的作用上的区分shellifc言语if0为真,走then正好反而,非0走then不撑持平头变量径直if务须:ifi–ne0但是撑持字符串变量径直ififstr如其字符串非0撑持变量径直ifif(i)以command当做if环境以多条command或因变量当做if环境echo–ninput:readuserif多条训令,这些下令之间一定于and(与)grep$user/etc/passwd>/tmp/nullwho-u|grep$userthen上头的训令都履行胜利,归来值$?为0,0为真,运转thenecho"$userhaslogged"else训令履行挫折,$?为1,运转elseecho"$userhasnotlogged"fishtest.shinput:macgmacgpts/0May1515:55.2075(192.168.1.100)macghasloggedshtest.shinput:ddddddhasnotlogged以因变量当做if环境(因变量就一定于command,因变量的长处是其return值得以自界说)if以因变量当做if环境,getynthen因变量reture值0为真,走thenecho"youranswerisyes"else因变量return值非0为假,走elseecho"youranserisno"fiifcommand等价于command+if$?$vitestsh.sh!/bin/shifcat111-tmp.txt|grepting1thenechofoundelseecho"nofound"fi$vitestsh.sh!/bin/shcat111-tmp.txt|grepting1if$?-eq0thenecho$?echofoundelseecho$?echo"nofound"fi$shtestsh.shnofound$shtestsh.sh1nofound$vi111-tmp.txtthatis222filethisting1is111file$shtestsh.shthisting1is111filefound$vi111-tmp.txtthatis222filethisting1is111file$shtestsh.shthisting1is111file0found以环境抒发式当做if环境价值观if从句——以环境抒发式当做if环境if环境抒发式thencommandcommandcommandelsecommandcommandfi环境抒发式文书抒发式if-ffile如其文书在if-d...如其目次在if-sfile如其文书在且非空if-rfile如其文书在且可读if-wfile如其文书在且可写if-xfile如其文书在且可履行平头变量抒发式ifint1-eqint2如其int1对等int2ifint1-neint2如其不对等ifint1-geint2如其>=ifint1-gtint2如其>ifint1-leint2如其<=ifint1-ltint2如其<字符串变量抒发式If$a=$b如其string1对等string2字符串容许应用赋值号做等号if$string1!=$string2如其string1不对等string2if-n$string如其string非空(非0),归来0(true)if-z$string如其string为空if$sting如其string非空,归来0(和-n类似)环境抒发式引证变量要带$ifa=b;thenechoequalelseechonoequalfimacg@machome~$shtest.shinputa:5inputb:5noequal(对等抒发式没比$a和$b,而是比和a和b,天然a!=b)纠正:if$a=$b;thenechoequalelseechonoequalfimacg@machome~$shtest.shinputa:5inputb:5equal-eq-ne-lt-nt不得不用来平头,不快用来字符串,字符串对等用赋值号=macg@machome~$vitest.shecho-n"inputyourchoice:"readvarif$var-eq"yes"thenecho$varfimacg@machome~$sh-xtest.shinputyourchoice:ytest.sh:line3:test:y:integerexpression_r_r_rexpected期望平头式,即-eq不撑持字符串=放在别的地域是赋值,放在if里即字符串对等,shell里没==的,那是c言语的对等无空格的字符串,得以加"",也得以不加macg@machome~$vitest.shecho"inputa:"readaecho"inputis$a"if$a=123;thenechoequal123fimacg@machome~$shtest.shinputa:123inputis123equal123=当做对等时,其两边都务须加空格,要不失灵等号也是操作符,务须和其它变量,关头字,用空格格开(等号做赋值号时正好反而,两边不许有空格)macg@machome~$vitest.shecho"inputyourchoice:"readvarif$var="yes"thenecho$varecho"inputiscorrect"elseecho$varecho"inputerror"fimacg@machome~$vitest.shecho"inputyourchoice:"readvarif$var="yes"在等号两边加空格thenecho$varecho"inputiscorrect"elseecho$varecho"inputerror"fimacg@machome~$shtest.shinputyourchoice:yyinputiscorrectmacg@machome~$shtest.shinputyourchoice:nninputiscorrect输错了也走then,都走then,干吗?因if把$var="yes"连读成一个变量,而此变量为空,归来1,则走elsemacg@machome~$shtest.shinputyourchoice:yyinputerrormacg@machome~$shtest.shinputyourchoice:nonoinputerror所如同常If$ANS等价于if-n$ANS如其字符串变量非空(then),空(else)echo"inputyourchoice:"readANSif$ANSthenechonoemptyelseechoempthfimacg@machome~$shtest.shinputyourchoice:回车empth介绍回车即空串macg@machome~$shtest.shinputyourchoice:34noempty平头环境抒发式,大于,小于,shell里没>和<,会被当做尖括号,除非-ge,-gt,-le,ltmacg@machome~$vitest.shecho"inputa:"readaif$a-ge100;thenecho3bitelseecho2bitfimacg@machome~$shtest.shinputa:1233bitmacg@machome~$shtest.shinputa:202bit平头操作记号-ge,-gt,-le,-lt,别忘了加-iftest$age100;thenmacg@machome~$shtest.shtest.sh:line4:test:ge:binaryoperatorexpectediftest$a-ge100;thenmacg@machome~$shtest.shinputa:1233bit论理抒发式论理非!环境抒发式的反而if!抒发式if!-d$num如其不在目次$num论理与–a环境抒发式的并重if抒发式1–a抒发式2论理或-o环境抒发式的或if抒发式1–o抒发式2论理抒发式抒发式与前的=!=-d–f–x-ne-eq-lt等合用论理记号就如常的接其它抒发式,没任何括号(),即并重if-z"$JHHOME"-a-d$HOME/$num留意论理与-a与论理或-o很易于和其它字符串或文书的演算记号搞混了最常见的赋值式,赋值前对=两边的变量都进展评测左首测变量是不是为空,右首测目次(值)是不是在(值是不是有效)macg@mac-home~$vitest.sh:echo"inputthenum:"readnumecho"inputis$num"if-z"$JHHOME"-a-d$HOME/$num如其变量$JHHOME为空,且$HOME/$num目次在thenJHHOME=$HOME/$num则赋值fiecho"JHHOMEis$JHHOME"\-----------------------macg@mac-home~$shtest.shinputthenum:pppinputispppJHHOMEis目次-d$HOME/$num不在,因而$JHHOME没被then赋值macg@mac-home~$mkdirpppmacg@mac-home~$shtest.shinputthenum:pppinputispppJHHOMEis/home/macg/ppp一个-o的案例,内中却揭示了=务须两边留空格的情况echo"inputyourchoice:"readANSif$ANS="Yes"-o$ANS="yes"-o$ANS="y"-o$ANS="Y"thenANS="y"elseANS="n"fiecho$ANSmacg@machome~$shtest.shinputyourchoice:nymacg@machome~$shtest.shinputyourchoice:noy干吗进口不是yes,后果仍是y(走then)因=被连读了,成了变量$ANS="Yes",而变量又为空,因而走else了macg@machome~$vitest.shecho"inputyourchoice:"readANSecho"inputyourchoice:"readANSif$ANS="Yes"-o$ANS="yes"-o$ANS="y"-o$ANS="Y"thenANS="y"elseANS="n"fiecho$ANSmacg@machome~$shtest.shinputyourchoice:nonmacg@machome~$shtest.shinputyourchoice:yesymacg@machome~$shtest.shinputyourchoice:yy以test环境抒发式当做if环境iftest$num-eq0等价于if$num–eq0test抒发式,没iftest$num-eq0thenecho"tryagain"elseecho"good"fimantestmacg@machome~$mantest(1)UserCommands(1)SYNOPSIStestEXPRESSIONEXPRESSION-nSTRINGthelengthofSTRINGisnonzero-n和径直$str都好坏0环境-zSTRINGthelengthofSTRINGiszeroSTRING1=STRING2thestringsareequalSTRING1!=STRING2thestringsarenotequalINTEGER1-eqINTEGER2INTEGER1isequaltoINTEGER2INTEGER1-geINTEGER2INTEGER1isgreaterthanorequaltoINTEGER2INTEGER1-gtINTEGER2INTEGER1isgreaterthanINTEGER2INTEGER1-leINTEGER2INTEGER1islessthanorequaltoINTEGER2INTEGER1-ltINTEGER2INTEGER1islessthanINTEGER2INTEGER1-neINTEGER2INTEGER1isnotequaltoINTEGER2FILE1-ntFILE2FILE1isnewer(modificationdate)thanFILE2FILE1-otFILE2FILE1isolderthanFILE2-bFILEFILEexistsandisblockspecial-cFILEFILEexistsandischaracterspecial-dFILEFILEexistsandisadirectory-eFILEFILEexists文书在-fFILEFILEexistsandisaregularfile文书在且是一般文书-hFILEFILEexistsandisasymboliclink(sameas-L)-LFILEFILEexistsandisasymboliclink(sameas-h)-GFILEFILEexistsandisownedbytheeffectivegroupID-OFILEFILEexistsandisownedbytheeffectiveuserID-pFILEFILEexistsandisanamedpipe-sFILEFILEexistsandhasasizegreaterthanzero-SFILEFILEexistsandisasocket-wFILEFILEexistsandiswritable-xFILEFILEexistsandisexecutableif简化文句最常用的简化if文句&&如其是前,则后-f/var/run/dhcpd.pid&&rm/var/run/dhcpd.pid检讨文书是不是在,如其在就删掉||如其不是前,则后-f/usr/sbin/dhcpd||exit0检验文书是不是在,如其在就退出用简化if和$1,$2,$3来检测参数,不有理就调用help-z"$1"&&help如其头个参数不在(-z字符串长度为0)"$1"="-h"&&help如其头个参数是-h,就显得help案例!/bin/sh-f"/etc/sysconfig/network-scripts/ifcfg-eth0"&&rm-f/etc/sysconfig/network-scripts/ifcfg-eth0cpifcfg-eth0.bridge/etc/sysconfig/network-scripts/ifcfg-eth0-f"/etc/sysconfig/network-scripts/ifcfg-eth1"&&rm-f/etc/sysconfig/network-scripts/ifcfg-eth1cpifcfg-eth1.bridge/etc/sysconfig/network-scripts/ifcfg-eth1-f"/etc/sysconfig/network-scripts/ifcfg-eth0:1"&&rm-f/etc/sysconfig/network-scripts/ifcfg-eth0:1。

      ksh,bash(据说从2.02起引入对的撑持)等撑持。