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>&#160;<table bgcolor="#000000" border="1" cols="1" width="800"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff"><b>if</b> [条件判断一 ] &amp;&amp; </font><font color="#ffff00">(||)</font><font color="#ffffff">[ 条件判断二 ]; <b>then</b>&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#ffff00">&lt;==if 是起始的意思,后面可以接若干个判断式,使用 &amp;&amp; 或 ||</font></font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;执行内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>elif</b>[ 条件判断三 ] &amp;&amp; </font><font color="#ffff00">(||)</font><font color="#ffffff">[ 条件判断四 ]; <b>then</b>&#160;&#160;&#160;&#160; </font><font color="#ffff00">&lt;==第二段的判断,如果第一段没有符合就来此搜寻条件</font></font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;执行第二段内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>else</b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ffff00">&lt;==当前两段都不符合时,就以这段内容来执行!</font></font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;执行第三段内容程序</font><br><font size="-1" face="SimSun"><font color="#ffffff"><b>fi</b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ffff00">&lt;==结束 if then 的条件判断!</font></font></td></tr></tbody></table><p>上面的意思是这这样的:在中刮号『<font face="SimSun">[]</font>』里面的是条件式,如果是复合式的条件判断(如若A及B则C之类的逻辑判断),那么就需要在两个中刮号之间加上『<font face="SimSun">&amp;&amp;(and)』或者是『 || (or)</font>』这样的逻辑表达式才行!如果是多重选择的话,那么就需要以elif (optional, 选择性的,若有需要才加上!)来新增另一个条件;如果所有的条件都不适用,则使用else (optional)来进行最后的执行内容啰!</p></blockquote><blockquote>不过,这里有几个新手常犯的错误,我们需要来加强说明一下:<ol><li><font color="#000099">在 [ ] 当中,只能有一个判别式;</font></li><li><font color="#000099">在 [ ] 与 [ ] 当中,可以使用 &amp;&amp; 或 || 来组织判别式;</font></li><li><font color="#000099">每一个独立的组件之间『<b>都需要有空格键来隔开</b>』!</font></li></ol>尤其是最后一点,最容易犯的错啦!好了,我们来进行一个简单的判别式好了!<br>&#160;<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">&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo "script is running..."</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;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>&#160;<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">&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo "script is running..."</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;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>&#160;<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">&#160;&#160;&#160;&#160;&#160;&#160;&#160;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">&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo "You MUST input parameters"</font><br><font size="-1" color="#ffffff" face="SimSun">else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;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>&#160;<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&#160;&#160;&#160;</font><font color="#ffffff">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&#160;&lt;==编辑一个档案为 test1.sh 的 script</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">#!/bin/bash&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&lt;==宣告使用的 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:&#160;VBird</font><br><font size="-1" color="#ffffff" face="SimSun"># date:&#160;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">&#160; echo"Now, the services of your Linux system will be detect!"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; echo"The www, ftp, ssh, and sendmail + pop3 will be detect!"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; echo" "</font><br><font size="-1" color="#ffffff" face="SimSun"># 2. www</font><br><font size="-1" face="SimSun"><font color="#ffffff">&#160; www=`netstat-an|grep LISTEN|grep :80`&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&#160;&lt;==这个就是变量啦!并使用了管线命令!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">&#160; if ["$www" != "" ]; then&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&#160;&#160;&lt;==开始条件的判断啰!</font></font><br><font size="-1" face="SimSun"><font color="#ffffff">&#160;&#160;&#160;&#160;&#160;echo "WWW is running"&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&lt;==若条件成立,那么就打印这一行的内容!</font></font><br><font size="-1" color="#ffffff" face="SimSun">&#160; else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "WWW is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 3. ftp</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; ftp=`netstat-an|grep LISTEN|grep :21`</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; if ["$ftp" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "FTP is running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "FTP is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 4. ssh</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; ssh=`netstat-an|grep LISTEN|grep :22`</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; if ["$ssh" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "SSH is running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "SSH is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; fi</font><br><font size="-1" color="#ffffff" face="SimSun"># 5. sendmail+ pop3</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; smtp=`netstat-an|grep LISTEN|grep :25`</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; pop3=`netstat-an|grep LISTEN|grep :110`</font><br><font size="-1" face="SimSun"><font color="#ffffff">&#160; if ["$smtp" != "" ]&#160;&#160; &amp;&amp; [ "$pop3" != "" ]; then&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ff9900">&#160;&lt;==有两个以上的条件式,就使用 &amp;&amp; 或 || 来分隔!</font></font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "sendmail is OK!"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; elif[ "$smtp" != "" ] &amp;&amp; [ "$pop3"&#160; = "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "sendmail have some problem of your pop3"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; elif[ "$smtp"&#160; = "" ] &amp;&amp; [ "$pop3" != "" ]; then</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "sendmail have some problem of your smtp"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; else</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;echo "sendmail is NOT running"</font><br><font size="-1" color="#ffffff" face="SimSun">&#160; fi</font><br><font size="-1" face="SimSun"><font color="#ffffff">[test @testtest]#</font><font color="#ffff00"> sh port.sh</font><font color="#ffffff">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</font><font color="#ffff00">&#160;</font><font color="#ff9900">&#160;&lt;==执行看看输出的结果!</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 + -
显示快捷键?