0340bashshell-scripts.htm
来自「鸟哥LINUX 学习课本」· HTM 代码 · 共 1,372 行 · 第 1/5 页
HTM
1,372 行
</tbody></table><p>逻辑判断式与 if...then...fi 的关系是密不可分的,我们底下就先来谈一谈这一个判断式当中最常使用的语法吧!</p></ul><hr width="100%"><a name="rulesss"></a><font color="#000099"><font size="+1">条件式判断:</font>if...then...fi,case.....esac</font><ul><li><a name="ifthen"></a><font color="#000099">条件判断一:if then fi 的方式</font></li></ul><blockquote>OK!刚刚我们 建立了第一支 script ,在屏幕上面以 script 来输出问候语!好了,现在我们如果要让scripts 加上『判断』要如何来工作呢?这就是所谓的条件式判断了!最常使用到的就是『<font face="SimSun">if ... then .... else if .... then ... end if </font>』的作法了!这个条件判断的语法为:<br> <table bgcolor="#000000" border="1" cols="1" width="800"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff"><b>if</b> [条件判断一 ] && </font><font color="#ffff00">(||)</font><font color="#ffffff">[ 条件判断二 ]; <b>then</b>       </font><font color="#ffff00"><==if 是起始的意思,后面可以接若干个判断式,使用 && 或 ||</font></font><br><font size="-1" color="#ffffff" face="SimSun">   执行内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>elif</b>[ 条件判断三 ] && </font><font color="#ffff00">(||)</font><font color="#ffffff">[ 条件判断四 ]; <b>then</b>     </font><font color="#ffff00"><==第二段的判断,如果第一段没有符合就来此搜寻条件</font></font><br><font size="-1" color="#ffffff" face="SimSun">   执行第二段内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>else</b>                                           </font><font color="#ffff00"><==当前两段都不符合时,就以这段内容来执行!</font></font><br><font size="-1" color="#ffffff" face="SimSun">   执行第三段内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>fi</b>                                             </font><font color="#ffff00"><==结束 if then 的条件判断!</font></font></td></tr></tbody></table><p>上面的意思是这这样的:在中刮号『<font face="SimSun">[]</font>』里面的是条件式,如果是复合式的条件判断(如若A及B则C之类的逻辑判断),那么就需要在两个中刮号之间加上『<font face="SimSun">&&(and)』或者是『 || (or)</font>』这样的逻辑表达式才行!如果是多重选择的话,那么就需要以elif (optional, 选择性的,若有需要才加上!)来新增另一个条件;如果所有的条件都不适用,则使用else (optional)来进行最后的执行内容啰!</p></blockquote><blockquote>不过,这里有几个新手常犯的错误,我们需要来加强说明一下:<ol><li><font color="#000099">在 [ ] 当中,只能有一个判别式;</font></li><li><font color="#000099">在 [ ] 与 [ ] 当中,可以使用 && 或 || 来组织判别式;</font></li><li><font color="#000099">每一个独立的组件之间『<b>都需要有空格键来隔开</b>』!</font></li></ol>尤其是最后一点,最容易犯的错啦!好了,我们来进行一个简单的判别式好了!<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">vi test06-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># This programis used to study if then</font><br><font size="-1" color="#ffffff" face="SimSun"># VBird 2002/06/27</font><br><font size="-1" color="#ffffff" face="SimSun">echo "Pressy to continue"</font><br><font size="-1" color="#ffffff" face="SimSun">read yn</font><br><font size="-1" color="#ffffff" face="SimSun">if [ "$yn"= "y" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "script is running..."</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "STOP!"</font><br><font size="-1" color="#ffffff" face="SimSun">fi</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">sh test06-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">Press y tocontinue</font><br><font size="-1" color="#ffffff" face="SimSun">y</font><br><font size="-1" color="#ffffff" face="SimSun">script is running...</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]$ </font><font color="#ffff00">sh test06-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">Press y tocontinue</font><br><font size="-1" color="#ffffff" face="SimSun">n</font><br><font size="-1" color="#ffffff" face="SimSun">STOP!</font></td></tr></tbody></table><p>很简单的一个例子吧!当输入为 y 的时候,就给他进行,若非为 y 则不予以进行!但是这里有个问题,就是如果我输入为Y 时,程序还是停止了!怎么办?!这个时候就需要使用到 || 这个东西啦!我们可以这样做!<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">cp test06-ifthen.sh test07-ifthen.sh</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">vi test07-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># This programis used to study if then</font><br><font size="-1" color="#ffffff" face="SimSun"># VBird 2002/06/27</font><br><font size="-1" color="#ffffff" face="SimSun">echo "Pressy to continue"</font><br><font size="-1" color="#ffffff" face="SimSun">read yn</font><br><font size="-1" color="#ffffff" face="SimSun">if [ "$yn"= "y" ] || [ "$yn" = "Y" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "script is running..."</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "STOP!"</font><br><font size="-1" color="#ffffff" face="SimSun">fi</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">sh test07-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">Press y tocontinue</font><br><font size="-1" color="#ffffff" face="SimSun">y</font><br><font size="-1" color="#ffffff" face="SimSun">script is running...</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]$ </font><font color="#ffff00">sh test07-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">Press y tocontinue</font><br><font size="-1" color="#ffffff" face="SimSun">Y</font><br><font size="-1" color="#ffffff" face="SimSun">script is running...</font></td></tr></tbody></table></p><p>好了!那么如果再加上前面提过的: parameter 的选用呢?呵呵!这个也蛮有趣的,我们再来试试看:<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]# </font><font color="#ffff00">vi test08-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">#!/bin/bash</font><br><font size="-1" color="#ffffff" face="SimSun"># set parametersin the if then</font><br><font size="-1" color="#ffffff" face="SimSun"># 需要加上hello 这个参数才会显示正确的!</font><br><font size="-1" color="#ffffff" face="SimSun"># VBird 2002/06/27</font><br><font size="-1" color="#ffffff" face="SimSun">if [ "$1" ="hello" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "Hello! How are you ?"</font><br><font size="-1" color="#ffffff" face="SimSun">elif [ "$1"= "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "You MUST input parameters"</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">       echo "The only accept parameter is hello"</font><br><font size="-1" color="#ffffff" face="SimSun">fi</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]#</font><font color="#ffff00"> sh test08-ifthen.sh hello</font></font><br><font size="-1" color="#ffffff" face="SimSun">Hello! Howare you ?</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]$ </font><font color="#ffff00">sh test08-ifthen.sh</font></font><br><font size="-1" color="#ffffff" face="SimSun">You MUST inputparameters</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @testtest]$ </font><font color="#ffff00">sh test08-ifthen.sh djdkf</font></font><br><font size="-1" color="#ffffff" face="SimSun">The only acceptparameter is hello</font></td></tr></tbody></table></p><p>呵呵!是不是不难呢?玩到这里应该对于 scripts 的认识有一定程度的了解了吧!嗯!好了,底下我们来玩一个大的!假设您已经知道netstat 与 grep 这两个东西的用法,那么如果要来侦测你的主机上面的 port 是否有开启时,可以使用底下的范例来进行:<br> <table bgcolor="#000000" border="1" cols="1" width="800"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]#</font><font color="#ffff00"> vi port.sh   </font><font color="#ffffff">                            </font><font color="#ff9900">  <==编辑一个档案为 test1.sh 的 script</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">#!/bin/bash                                                   </font><font color="#ff9900"> <==宣告使用的 shell 类型</font></font><br><font size="-1" color="#ffffff" face="SimSun"># program:Using to study the [if ... then ... fi] program</font><br><font size="-1" color="#ffffff" face="SimSun"># Made by: VBird</font><br><font size="-1" color="#ffffff" face="SimSun"># date: 2002/05/20</font><br><font size="-1" color="#ffffff" face="SimSun"># content:I will using this program to show your services</font><br><font size="-1" color="#ffffff" face="SimSun"># 1. printthe program's work in your screen</font><br><font size="-1" color="#ffffff" face="SimSun">  echo"Now, the services of your Linux system will be detect!"</font><br><font size="-1" color="#ffffff" face="SimSun">  echo"The www, ftp, ssh, and sendmail + pop3 will be detect!"</font><br><font size="-1" color="#ffffff" face="SimSun">  echo" "</font><br><font size="-1" color="#ffffff" face="SimSun"># 2. www</font><br><font size="-1" face="SimSun"><font color="#ffffff">  www=`netstat-an|grep LISTEN|grep :80`                 </font><font color="#ff9900">  <==这个就是变量啦!并使用了管线命令!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">  if ["$www" != "" ]; then                                 </font><font color="#ff9900">   <==开始条件的判断啰!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">     echo "WWW is running"                              </font><font color="#ff9900"> <==若条件成立,那么就打印这一行的内容!</font></font><br><font size="-1" color="#ffffff" face="SimSun">  else</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "WWW is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">  fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 3. ftp</font><br><font size="-1" color="#ffffff" face="SimSun">  ftp=`netstat-an|grep LISTEN|grep :21`</font><br><font size="-1" color="#ffffff" face="SimSun">  if ["$ftp" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "FTP is running"</font><br><font size="-1" color="#ffffff" face="SimSun">  else</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "FTP is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">  fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 4. ssh</font><br><font size="-1" color="#ffffff" face="SimSun">  ssh=`netstat-an|grep LISTEN|grep :22`</font><br><font size="-1" color="#ffffff" face="SimSun">  if ["$ssh" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "SSH is running"</font><br><font size="-1" color="#ffffff" face="SimSun">  else</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "SSH is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">  fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 5. sendmail+ pop3</font><br><font size="-1" color="#ffffff" face="SimSun">  smtp=`netstat-an|grep LISTEN|grep :25`</font><br><font size="-1" color="#ffffff" face="SimSun">  pop3=`netstat-an|grep LISTEN|grep :110`</font><br><font size="-1" face="SimSun"><font color="#ffffff">  if ["$smtp" != "" ]   && [ "$pop3" != "" ]; then         </font><font color="#ff9900"> <==有两个以上的条件式,就使用 && 或 || 来分隔!</font></font><br><font size="-1" color="#ffffff" face="SimSun">     echo "sendmail is OK!"</font><br><font size="-1" color="#ffffff" face="SimSun">  elif[ "$smtp" != "" ] && [ "$pop3"  = "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "sendmail have some problem of your pop3"</font><br><font size="-1" color="#ffffff" face="SimSun">  elif[ "$smtp"  = "" ] && [ "$pop3" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "sendmail have some problem of your smtp"</font><br><font size="-1" color="#ffffff" face="SimSun">  else</font><br><font size="-1" color="#ffffff" face="SimSun">     echo "sendmail is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">  fi</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]#</font><font color="#ffff00"> sh port.sh</font><font color="#ffffff">                             </font><font color="#ffff00"> </font><font color="#ff9900"> <==执行看看输出的结果!</font></font><br><font size="-1" color="#ffffff" face="SimSun">Now, the servicesof your Linux system will be detect!</font><br><font size="-1" color="#ffffff" face="SimSun">The www, ftp,ssh, and sendmail + pop3 will be detect!</font><p><font size="-1" color="#ffffff" face="SimSun">WWW is running</font><br><font size="-1" color="#ffffff" face="SimSun">FTP is running</font><br><font size="-1" color="#ffffff" face="SimSun">SSH is running</font><br><font size="-1" color="#ffffff" face="SimSun">sendmail isOK!</font></p></td></tr></tbody></table></p><p>很简单吧!上面这样就可以将你主机上面的数据进行解析啰!</p></blockquote><ul><li><a name="case"></a><font color="#000099">条件判断二:使用 case ...esac的方式</font></li></ul>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?