三种测试方法[expression][[spaceexpressionspace],别忘了空格][[expression]]testexpressionintegertest-gt,-lt,-eq,-ne,-ge,-leINT1=11INT2=22[$INT1-eq$INT2]or[[$INT1-eq$INT2]]ortest$INT1-eq$INT2执行结果与状态码的区别if条件,这个“条件”表示成功0,这个“条件”是“如果”之后的一个状态码。仅在使用上述整数测试条件时使用“[]”。如果测试成功,返回的状态码是0USERNAME=user11,如果grep"^$USERNAME>"/etc/passwd;然后[正确,grep返回的是状态代码]2.if[grep"^$USERNAME>"/etc/passwd];then[error,use"[]"onlywhentheaboveintegertestconditionisused]3.if[grep"^$USERNAME\>"/etc/passwd-eq0];then[错误,grep返回的是命令的执行结果,一行内容根本不是状态码,状态码在if后面]4.if[grep"^$USERNAME\>"/等/密码|剪切-d:-f3-eq0];then[如果$USERNAME的UID为0则条件成立,否则报错]5.ifgrep"^$USERNAME\>"/etc/passwd|剪切-d:-f3;then[这里先执行grep,如果$USERNAME的UID为0,如果0为状态码,则条件成立,否则同样错误]filetest-eFILE:测试文件是否存在-dFILE:测试文件是否为目录-fFILE:测试文件是否为普通文件-rFILE:测试当前用户是否对该文件有读权限-w-x[root@jiakang~]#[-daaa][root@jiakang~]#echo$?1[root@jiakang~]#[-da][root@jiakang~]#echo$?0定义脚本退出状态码exit:退出脚本,停止脚本执行[类似php的exitanddie]exit8[定义退出状态码为8]测试脚本是否有语法错误bash-nscriptbash-xscript:单步执行[root@jiakanga]#cattestif.sh#!/bin/bashFILE=/etc/inittabsif[-e$FILE];thenecho"OK"elseecho"Filenotfound"f[root@jiakanga]#bash-ntestif.shtestif.sh:第8行:语法错误:文件意外结束[root@jiakanga]#cattestif.sh#!/bin/bashFILE=/etc/inittabsif[-e$FILE];thenecho"OK"elseecho"Filenotfound"fi[root@jiakanga]#bash-xtestif.sh+FILE=/etc/inittabs+'['-e/etc/inittabs']'+echo$'\346\211\276\344\270\215\345\210\260\346\226\207\344\273\266'Filenotfound[root@jiakanga]#echo$?0【这个状态码是上次echo“filenotfound”返回的,echo输出的是上一条命令的状态码]stringtest==!=><-nstring:判断指定字符串是否为空,为空则为true,不为空则为false-zstring:判断指定字符串是否不为空,notEmpty为真,空为假[string==string][[spacestringspace==spacestringspace],注意==两边有空格][[string==string]][root@jiakang~]#A="aaa"[root@jiakang~]#B="bbb"[root@jiakang~]#[$A==$B][root@jiakang~]#echo$?1[root@jiakang~]#[$A!=$B][root@jiakang~]#echo$?0for循环用法:forvariableinlist;doloopbodydone例如:forIin12345;doadditionoperationdone生成列表的常用方法{1..100}seq[startnumber[hopnumber]]endnumber[root@jiakang~]#seq512345[root@jiakang~]#seq35345[root@jiakang~]#seq328357declareintegerletSUMdeclare-iSUM[root@jiakanga]#cattestfor.sh#!/bin/bashdeclare-iSUM=0forIin`seq12100`;doletSUM=$[$SUM+$I]doneecho"sum=$SUM"[root@jiakanga]#./testfor.shsum=2500[root@jiakanga]#cattestfor.sh#!/bin/bashdeclare-iSUM=0for我在{1..100};doletSUM=$[$SUM+$I]donecho"sum=$SUM"[root@jiakanga]#./testfor.shsum=5050
